过滤操作符

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扩展方法进行二级排序。

  1. LINQ包含五个排序算子:OrderBy,OrderByDescending,ThenBy,ThenByDescending和Reverse
  2. LINQ查询语法不支持OrderByDescending,ThenBy,ThenByDescending和Reverse。它只支持“升序”和“降序”排序方向的“排序”条款。
  3. 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。

要记住的要点:

  1. GroupBy&ToLookup返回一个集合,该集合具有一个键和一个基于键值字段值的内部集合。
  2. GroupBy的执行被推迟,而ToLookup的执行是立即的。
  3. LINQ查询语法可以以GroupBy或Select子句结束。

加入

加入运算符加入两个序列(集合)并产生结果。

join:

Join操作符运行于两个集合,即内部集合和外部集合。它返回一个新的集合,其中包含来自满足指定表达式的集合的元素。它与SQL的内部连接相同。

例如:

Join方法中的第一个参数用于指定内部序列,即standardList。Join方法的第二个和第三个参数用于指定一个字段,其值应该使用lambda表达式进行匹配,以便在结果中包含元素。外部序列的关键选择器student => student.StandardID指示:将studentList的每个元素的StandardID字段与内部序列的关键字匹配standard => standard.StandardID。如果两个键字段的值匹配,则将该元素包含在结果中。

加入查询语法:

查询语法中的连接运算符与方法语法略有不同。它需要外部序列,内部序列,密钥选择器和结果选择器。'on'关键字用于关键选择器,其中'equals'运算符的左侧是outerKeySelector,'equals'的右侧是innerKeySelector。

要记住的要点:

    1. Join 就像SQL的内部连接一样。它返回一个新的集合,其中包含两个集合中的通用元素,这两个集合的密钥匹
    2. 连接操作两个序列的内部序列和外部序列,并产生一个结果序列。
    3. 加入查询语法: 
      from... in outerSequence
      join... in innerSequence 
      on outerKey equals innerKey
      select ...

GroupJoin

方法查询:

查询语法:

投影运算符:Select,SelectMany

select

返回一个包含基于转换函数的元素的IEnumerable集合。它类似于生成平坦结果集的SQL的Select子句。

LINQ查询语法必须以SelectGroupBy子句结束。以下示例演示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如果集合为空,或者找不到指定条件的元素,它将返回集合的数据类型的默认值。

  1. Single()期望集合中只有一个元素。
  2. Single()在集合中没有元素或多个元素时抛出异常。
  3. 如果在Single()中指定了一个条件,并且结果不包含任何元素或多个元素,则会引发异常。
  4. SingleOrDefault()将返回一个泛型集合的数据类型的默认值,如果聚集中没有元素或指定的条件。
  5. 如果聚集中有多个元素或指定的条件,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 方法的更多相关文章

  1. LINQ之路 4:LINQ方法语法

    书写LINQ查询时又两种语法可供选择:方法语法(Fluent Syntax)和查询语法(Query Expression). LINQ方法语法是非常灵活和重要的,我们在这里将描述使用链接查询运算符的方 ...

  2. 四:MVC之LINQ方法语法

    linq 查询 有两种语法  ,前面我们说了一种,接下来说方法语法(我读着一直很绕口) 查询语法,方法语法 ------------------------以下文字都是复制-------------- ...

  3. 别再眼高手低了! 这些Linq方法都清楚地掌握了吗?

    不要再眼高手低了,这些Enumerable之常见Linq扩展方法都清楚掌握了吗?其实这是对我自己来说的! 例如:一个人这个技术掌握了一点那个技术也懂一点,其他的好像也了解一些,感觉自己啥都会一点,又觉 ...

  4. Linq分组,linq方法分组

    Group在SQL经常使用,通常是对一个字段或者多个字段分组,求其总和,均值等. Linq中的Groupby方法也有这种功能.具体实现看代码: 假设有如下的一个数据集: 01.public class ...

  5. 一些Linq方法,come on !!

    bool b1 = users.All(u => u.ID == 21); 判断是否元素都满足条件,如果有一个不满足,则返回False,都满足则返回TrueAny() bool b2 = use ...

  6. Linq 查询 与方法调用

    通常,使用linq查询时需要一个实现IQueryable<T> 的查询对象 public class DataA<T> : IQueryable<T> {....} ...

  7. 21扩展IEnumerable<T>泛型接口自定义LINQ的扩展方法

    LINQ方法实际上是对IEnumerable<TSource>的扩展,如图:   本篇自定义一个MyWhere方法,达到与Where相同的效果.     使用LINQ自带的Where方法 ...

  8. linq查询语法和方法-簡單用法

    來自:http://www.cnblogs.com/knowledgesea/p/3897665.html 1.简单的linq语法 //1 var ss = from r in db.Am_recPr ...

  9. EF中使用Linq时First、FirstOrDefault、Single、SingleOrDefault几个方法的区别

    在使用EntityFramework开发时,.NET的System.Linq.Enumerable类为我们提供了许多Linq方法. 给大家分享一下关于First.FirstOrDefault.Sing ...

随机推荐

  1. 动态添加LInk的分析

    动态创建HyperLink超链接: 1.如果添加HyperLink的代码只写在Button中,则只会显示最后一次添加的内容.所以必须在Pageload中添加. 2.首次载入: PageLoad    ...

  2. android框架Java API接口总注释/**@hide*/和internal API

    Android有两种类型的API是不能经由SDK访问的 l 第一种是位于com.android.internal包中的API我,位于frameworks/base/core/java/com/andr ...

  3. VueConf 全球首届Vue.js开发者大会资料整理

    最近一直关注VueConf全球首届Vue.js开发者大会,现在将此次开发者大会资料整理如下: 一.Vue 2017 现状与展望   [尤雨溪] 在线视频: PPT整理: Vue 2017 现状与展望 ...

  4. 工作流-----WorkFlow

    我们都知道对于一个OA系统来说,最重要的也是不可或缺的一个重要环节那就是对于工作流的实现,为此,最近专门在学习如何使用WorkFlow,问前辈,前辈也说道K2工作流引擎挺不错,自己同时也翻阅了一些资料 ...

  5. window 常用MySQL数据库命令总结

    登录:cmd - mysql -uroot -p 创建数据库:CREATE DATABASE `tpcms` DEFAULT CHARACTER SET utf8 COLLATE utf8_gener ...

  6. 10th week task -2 Object 的起源

    Objective-C与C++.Java等面向对象语言类似,不过很多方面有所差别.若是用过另一种面向对象语言,那么就能理解Objective-C所用的许多范式与模版了.然而语法上也许会显得陌生,因为该 ...

  7. Web前端面试指导(七):入职后的建议

    7.2 关于合同 签合同的时候,看公司要求,有些是3年,有些是5年,不要怕,签了就是了,真到想走的时候,提前说一声,随时可以走,不存在什么违约赔偿. 注意:你的合同和薪资都是属于保密的,不能让公司其他 ...

  8. css 平行四边

    在视觉设计中,平行四边形往往给人一种动感. 要生成一个平行四边形,只要通过css变形,就可做到: -webkit-transform: skewX(-45deg); 那么生成一个平行四边形的按钮呢?列 ...

  9. chosen下拉框插件的使用

    效果如下 第一步: 第二步: 根据HTML5规范, 通常在引入CSS和JS时不需要指明 type,因为 text/css 和 text/javascript 分别是他们的默认值. <link r ...

  10. C语言字符数组与字符串

    研究几个案例: 输出图案: #include <stdio.h> void main() { ][] = { {', ' ', ' '}, {', ' '}, {'}, {', ' '}, ...