LINQ 方法
过滤操作符
Where
运算符(Linq扩展方法)根据给定条件过滤集合。
在其中扩展方法有以下两个重载。一个过载需要Func <TSource,bool>输入参数和第二个重载方法需要Func <TSource,int,bool>输入参数其中int是索引:
查询语法中的Where子句:
在上面的示例查询中,lambda表达式主体s.Age > 12 && s.Age < 20
作为谓词函数传递,用于评估集合中的每个学生。Func<TSource, bool>
也可以使用带有匿名方法的Func类型委托作为谓词函数进行传递
方法中的扩展方法语法:
与查询语法不同,您需要传递整个lambda表达式作为谓词函数。
Where扩展方法也有第二个重载,包括集合中当前元素的索引。如果需要,您可以在逻辑中使用该索引。
多个Where子句:
OfType
使用OfType运算符根据每个元素的类型过滤上述集合
排序运算符
Orderby
OrderBy按升序或降序对集合的值进行排序。默认情况下,按升序排列集合,因为ascending
关键字在这里是可选的。
多重排序:
您可以在由逗号分隔的多个字段上对集合进行排序。给定的集合将首先基于第一个字段进行排序,然后如果第一个字段的值对于两个元素是相同的,那么它将使用第二个字段进行排序等等。
注:方法语法中的多重排序工作方式不同。使用ThenBy或ThenByDecending扩展方法进行二级排序。
- LINQ包含五个排序算子:OrderBy,OrderByDescending,ThenBy,ThenByDescending和Reverse
- LINQ查询语法不支持OrderByDescending,ThenBy,ThenByDescending和Reverse。它只支持“升序”和“降序”排序方向的“排序”条款。
- LINQ查询语法支持用逗号分隔的多个排序字段,而您必须使用ThenBy&ThenByDescending方法进行二级排序。
ThenBy&ThenByDescending
分组操作
Groupby
该组包含在实现了一个IGrouping <TKey,TSource>接口的特殊类型的集合中,其中TKey是一个键值,组中已经形成了该组,而TSource是与分组键值匹配的元素的集合。
LINQ查询可以以GroupBy或Select子句结束。 item.Key=by 后面接的数据
ToLookup
ToLookup与GroupBy相同; 唯一的区别是GroupBy执行延迟,而ToLookup执行是立即的。另外,ToLookup仅适用于Method语法。查询语法不支持ToLookup。
要记住的要点:
- GroupBy&ToLookup返回一个集合,该集合具有一个键和一个基于键值字段值的内部集合。
- GroupBy的执行被推迟,而ToLookup的执行是立即的。
- LINQ查询语法可以以GroupBy或Select子句结束。
加入
加入运算符加入两个序列(集合)并产生结果。
join:
Join操作符运行于两个集合,即内部集合和外部集合。它返回一个新的集合,其中包含来自满足指定表达式的集合的元素。它与SQL的内部连接相同。
例如:
Join方法中的第一个参数用于指定内部序列,即standardList。Join方法的第二个和第三个参数用于指定一个字段,其值应该使用lambda表达式进行匹配,以便在结果中包含元素。外部序列的关键选择器student => student.StandardID
指示:将studentList的每个元素的StandardID字段与内部序列的关键字匹配standard => standard.StandardID
。如果两个键字段的值匹配,则将该元素包含在结果中。
加入查询语法:
查询语法中的连接运算符与方法语法略有不同。它需要外部序列,内部序列,密钥选择器和结果选择器。'on'关键字用于关键选择器,其中'equals'运算符的左侧是outerKeySelector,'equals'的右侧是innerKeySelector。
要记住的要点:
- Join 就像SQL的内部连接一样。它返回一个新的集合,其中包含两个集合中的通用元素,这两个集合的密钥匹
- 连接操作两个序列的内部序列和外部序列,并产生一个结果序列。
- 加入查询语法:
from... in outerSequence
join... in innerSequence
on outerKey equals innerKey
select ...
GroupJoin
方法查询:
查询语法:
投影运算符:Select,SelectMany
select
返回一个包含基于转换函数的元素的IEnumerable集合。它类似于生成平坦结果集的SQL的Select子句。
LINQ查询语法必须以Select或GroupBy子句结束。以下示例演示select运算符,该运算符返回StudentName的字符串集合。
SelectMany:
SelectMany运算符投影基于转换函数的值序列,然后将它们平铺为一个序列。
量词运算符
All
All运算符在指定的条件下评估给定集合中的每个元素,如果所有元素满足条件,则返回True。
Any
查元素是否满足给定的条件,如果有一个满足就返回真。
Contains
检查集合中是否存在指定的元素,并返回布尔值。
即使studentList中存在“Bill”,Contains也会返回false。这是因为Contains扩展方法只比较对象的引用,而不是对象的实际值。因此,要比较学生对象的值,您需要通过实现IEqualityComparer接口创建一个类,该接口比较两个Student对象的值并返回布尔值。
聚合运算符
Aggregate
执行累积操作。这个跟JavaScript里面的reduce函数一样。
Average
平均扩展方法计算集合中数值项的平均值。平均方法返回可为空或不可空的十进制,双精度或浮点值。
Count
Count运算符返回集合中元素的数量或满足给定条件的元素数量。
Max
Max运算符返回集合中最大的数字元素。
Sum
计算集合中数字项目的总和。
元素操作符 :从一个序列(集合)中返回一个特定的元素
ElementAt & ElementAtOrDefault
ElementAt: 法返回给定集合中指定索引的元素。如果指定的索引超出集合的范围,则会抛出索引超出范围的异
ElementAtOrDefault: 如果指定的索引超出了集合的范围,那么它将返回数据类型的默认值而不是抛出错误。
First & FirstOrDefault
返回集合中第零个索引的元素,即第一个元素。此外,它返回一个满足指定条件的元素
Last & LastOrDefault
返回集合中的最后一个元素.跟First&FirstOrDefault刚好是相反的。
Single & SingleOrDefault
返回集合中唯一的元素,如果找不到元素或存在多个元素都会报错。
SingleOrDefault如果集合为空,或者找不到指定条件的元素,它将返回集合的数据类型的默认值。
- Single()期望集合中只有一个元素。
- Single()在集合中没有元素或多个元素时抛出异常。
- 如果在Single()中指定了一个条件,并且结果不包含任何元素或多个元素,则会引发异常。
- SingleOrDefault()将返回一个泛型集合的数据类型的默认值,如果聚集中没有元素或指定的条件。
- 如果聚集中有多个元素或指定的条件,SingleOrDefault()将会抛出一个异常。
平等运算符
SequenceEqual
SequenceEqual方法检查元素的数量,每个元素的值和两个集合中元素的顺序是否相等。
Concat
附加两个相同类型的序列并返回一个新的序列(集合)。
生成操作符 LINQ包含了生成运算符DefaultIfEmpty,Empty,Range&Repeat。Empty,Range和Repeat方法不是IEnumerable或IQueryable的扩展方法,但它们只是静态类Enumerable中定义的静态方法。
DefaultIfEmpty
如果调用DefaultIfEmpty()的给定集合为空,则DefaultIfEmpty()方法将返回具有默认值的新集合。
DefaultIfEmpty()的另一个重载方法需要一个应该被默认值替换的值参数。
Empty
返回一个空的集合。
Empty()方法不像其他LINQ方法那样是IEnumerable或IQueryable的扩展方法。这是Enumerable静态类中包含的静态方法。所以,你可以像Enumerable.Empty <TResult>()这样的其他静态方法调用它。Empty()方法返回一个指定类型的空集合
Range
从第一个元素开始返回一个IEnumerable <T>类型的集合,其中包含指定数量的元素和顺序值。
Repeat
生成一个具有指定数量元素的IEnumerable <T>类型的集合,每个元素包含相同的指定值。
设置运算符
Distinct
不同的扩展方法返回给定集合中唯一元素的新集合。
Except
需要两个集合。它返回一个新集合,其中第一个集合中的元素不存在于第二个集合(参数集合)中。
复杂的类型跟上门一样。
Intersect
需要两个集合。它返回一个新的集合,其中包含集合中存在的公共元素。
Union
需要两个集合,并返回一个新集合,其中包含两个集合中不同的元素。
分区操作符
Skip & SkipWhile
从第一个元素开始跳过指定数量的元素,并返回其余元素.
LINQ中的SkipWhile()扩展方法跳过集合中的元素,直到指定的条件为真。它返回一个新的集合,包含所有剩余的元素,一旦指定的条件为任何元素为false。
Take & TakeWhile
返回从第一个元素开始的指定数量的元素。
TakeWhile()扩展方法返回给定集合中的元素,直到指定的条件为真。如果第一个元素本身不满足条件,则返回一个空集合。
在上面的例子中,TakeWhile()只包含第一个元素,因为第二个字符串元素不满足条件。
注:把Skip和Take联合起来就可以形成分页。
转换运算符
AsEnumerable & AsQueryable
AsEnumerable和AsQueryable方法将源对象强制转换或分别转换为IEnumerable <T>或IQueryable <T>。
Cast与AsEnumerable <T>完全相同。它将源对象转换为IEnumerable <T>。
ToArray:ToArray(),ToList(),ToDictionary():
ToArray(),ToList(),ToDictionary()方法分别将源对象转换为数组,List或Dictionary。
附加:
Let 关键字
“let”关键字在查询语法中很有用。它会投影一个新的范围变量,允许重新使用表达式并使查询更具可读性。
例如: 这里需要写,两遍 let可以看成在查询语法里面申明一个变量。
Into 关键字
分组里面也可以使用Into关键字
LINQ 方法的更多相关文章
- LINQ之路 4:LINQ方法语法
书写LINQ查询时又两种语法可供选择:方法语法(Fluent Syntax)和查询语法(Query Expression). LINQ方法语法是非常灵活和重要的,我们在这里将描述使用链接查询运算符的方 ...
- 四:MVC之LINQ方法语法
linq 查询 有两种语法 ,前面我们说了一种,接下来说方法语法(我读着一直很绕口) 查询语法,方法语法 ------------------------以下文字都是复制-------------- ...
- 别再眼高手低了! 这些Linq方法都清楚地掌握了吗?
不要再眼高手低了,这些Enumerable之常见Linq扩展方法都清楚掌握了吗?其实这是对我自己来说的! 例如:一个人这个技术掌握了一点那个技术也懂一点,其他的好像也了解一些,感觉自己啥都会一点,又觉 ...
- Linq分组,linq方法分组
Group在SQL经常使用,通常是对一个字段或者多个字段分组,求其总和,均值等. Linq中的Groupby方法也有这种功能.具体实现看代码: 假设有如下的一个数据集: 01.public class ...
- 一些Linq方法,come on !!
bool b1 = users.All(u => u.ID == 21); 判断是否元素都满足条件,如果有一个不满足,则返回False,都满足则返回TrueAny() bool b2 = use ...
- Linq 查询 与方法调用
通常,使用linq查询时需要一个实现IQueryable<T> 的查询对象 public class DataA<T> : IQueryable<T> {....} ...
- 21扩展IEnumerable<T>泛型接口自定义LINQ的扩展方法
LINQ方法实际上是对IEnumerable<TSource>的扩展,如图: 本篇自定义一个MyWhere方法,达到与Where相同的效果. 使用LINQ自带的Where方法 ...
- linq查询语法和方法-簡單用法
來自:http://www.cnblogs.com/knowledgesea/p/3897665.html 1.简单的linq语法 //1 var ss = from r in db.Am_recPr ...
- EF中使用Linq时First、FirstOrDefault、Single、SingleOrDefault几个方法的区别
在使用EntityFramework开发时,.NET的System.Linq.Enumerable类为我们提供了许多Linq方法. 给大家分享一下关于First.FirstOrDefault.Sing ...
随机推荐
- 动态添加LInk的分析
动态创建HyperLink超链接: 1.如果添加HyperLink的代码只写在Button中,则只会显示最后一次添加的内容.所以必须在Pageload中添加. 2.首次载入: PageLoad ...
- android框架Java API接口总注释/**@hide*/和internal API
Android有两种类型的API是不能经由SDK访问的 l 第一种是位于com.android.internal包中的API我,位于frameworks/base/core/java/com/andr ...
- VueConf 全球首届Vue.js开发者大会资料整理
最近一直关注VueConf全球首届Vue.js开发者大会,现在将此次开发者大会资料整理如下: 一.Vue 2017 现状与展望 [尤雨溪] 在线视频: PPT整理: Vue 2017 现状与展望 ...
- 工作流-----WorkFlow
我们都知道对于一个OA系统来说,最重要的也是不可或缺的一个重要环节那就是对于工作流的实现,为此,最近专门在学习如何使用WorkFlow,问前辈,前辈也说道K2工作流引擎挺不错,自己同时也翻阅了一些资料 ...
- window 常用MySQL数据库命令总结
登录:cmd - mysql -uroot -p 创建数据库:CREATE DATABASE `tpcms` DEFAULT CHARACTER SET utf8 COLLATE utf8_gener ...
- 10th week task -2 Object 的起源
Objective-C与C++.Java等面向对象语言类似,不过很多方面有所差别.若是用过另一种面向对象语言,那么就能理解Objective-C所用的许多范式与模版了.然而语法上也许会显得陌生,因为该 ...
- Web前端面试指导(七):入职后的建议
7.2 关于合同 签合同的时候,看公司要求,有些是3年,有些是5年,不要怕,签了就是了,真到想走的时候,提前说一声,随时可以走,不存在什么违约赔偿. 注意:你的合同和薪资都是属于保密的,不能让公司其他 ...
- css 平行四边
在视觉设计中,平行四边形往往给人一种动感. 要生成一个平行四边形,只要通过css变形,就可做到: -webkit-transform: skewX(-45deg); 那么生成一个平行四边形的按钮呢?列 ...
- chosen下拉框插件的使用
效果如下 第一步: 第二步: 根据HTML5规范, 通常在引入CSS和JS时不需要指明 type,因为 text/css 和 text/javascript 分别是他们的默认值. <link r ...
- C语言字符数组与字符串
研究几个案例: 输出图案: #include <stdio.h> void main() { ][] = { {', ' ', ' '}, {', ' '}, {'}, {', ' '}, ...