C# LINQ

LINQ  language-Integrated Query

语言集成查询,我感觉和sql语句差不多

LINQ 语法不是立马执行的,不像我们以前的加减乘除等运算啊,它把对它的操作先攒着,只有在用到 这个对象的时候 才会一下全部执行
  
这个例子,输出结果在右边。里面有我们后加的 “Zoe Doe”,他要是前两句执行了的话,shortNames就已经成型了,只含名字长度<=8的名字,有3个
names 添加一个,跟我shortNames 没关系,最终的输出结果应该是3个
但是是4个,这就验证了我们上面说的话,LINQ 不是立马执行,而是等在被使用的时刻再执行,这个例子里,names先加了一个元素,然后在foreach里才执行LINQ语句
这种特性,在大容量数据库时候有用,可能人家一直再往里存数,你不用管,你查询的时候就筛选出来了,不用存一个查一个,浪费


上面我们展示了 LINQ的两种语法
Query Syntax    Method syntax

一个是类似sql的query 语法(这是比较流行的写法,通俗易懂)  一个是method 语法(用到了Lambda 表达式,就是 name => name.Length <= 8这儿)

Lambda 表达式

=> 分开,左边是参数,可以有多个参数,在上面的例子里是name这个参数,name 只是个形参,随便写啥都行,写x y z 都行,这里写name只是为了方便,因为list里面存的都是姓名
右边 是个表达式,其bool结果用来筛选哪些是我们想要的,这里面我们想要 名字长度<=8


Where()  filtering data

Where 用来过滤数据 配合Lambda 表达式。把表达式应用到每个元素,根据表达式的结果 True(留) False(pass) 来过滤数据
这里面的表达式可以是简单的逻辑n < 10  复杂点的逻辑n > 1 && n != 4 && n < 10   函数返回值excludedNumbers.Contains(n)

下面举个复杂点的例子。不仅仅是简单的intstring 对象,加深一下对Where 作用的理解

其实多个逻辑可以分开写,一眼就知道啥意思,就是代码太长

这里写了3个Where,执行效率上没啥差别,也很直观,就是稍微长了点,中间用 . 来链接多个Where

最后说一句,筛选出来的数据是一个新的对象,原数据一直留在那儿,你不操作它就保持原样


排序 OrderBy  ThenBy

上面说的Where用来筛选数据,现在说排序,语法都是一样的,默认是升序,可以改成降序,后面要加个ToList再显示转换成原类型

很简单是吧,但是现实生活中排序不是这么简单的,比如 总考分相同的考生 按照语数外的分数再排序,这就涉及到多个条件了
多个条件用ThenBy连接,ThenBy多了可以继续ThenBy

posted on 2019-09-22 20:45  chungehpu  阅读(1606)  评论(0编辑  收藏  举报

导航