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)
等
下面举个复杂点的例子。不仅仅是简单的int
和 string
对象,加深一下对Where
作用的理解
其实多个逻辑可以分开写,一眼就知道啥意思,就是代码太长
这里写了3个Where
,执行效率上没啥差别,也很直观,就是稍微长了点,中间用 .
来链接多个Where
最后说一句,筛选出来的数据是一个新的对象,原数据一直留在那儿,你不操作它就保持原样
排序 OrderBy ThenBy
上面说的Where
用来筛选数据,现在说排序,语法都是一样的,默认是升序,可以改成降序,后面要加个ToList
再显示转换成原类型
很简单是吧,但是现实生活中排序不是这么简单的,比如 总考分相同的考生 按照语数外的分数再排序,这就涉及到多个条件了
多个条件用ThenBy
连接,ThenBy
多了可以继续ThenBy
posted on 2019-09-22 20:45 chungehpu 阅读(1608) 评论(0) 编辑 收藏 举报