过滤操作符

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. elasticSearch请求流程图

  2. php 不用第三个变量 交换两个变量的值汇总

    //方法一:$a ="abc";$b="def"; $a = $a^$b;$b = $b^$a;$a = $a^$b; //方法二:list($a, $b)= ...

  3. 【学习笔记】JDBC数据库连接技术(Java Database Connectivity)

    一.JDBC简介 Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称.它可以把数据持久保存,是一种持久化机制. 1.持久化 持久化就是将程序中的数据在瞬时状态和 ...

  4. MySQL中在原表中做数据去重(按日期去重,保留id最小的记录)

    表名称 code600300 delete from code600300 where id not in (select minid from (select min(id) as minid fr ...

  5. Django分页解析

    分页 django中实现管理数据分页的类位于 django.core.paginator.py中 Paginator类 对列表数据进行分页处理 对象 Paginator(Post.objects.al ...

  6. angular2-动画

    使用动画: import { Component, Input } from '@angular/core'; import { trigger, state, style, animate, tra ...

  7. grunt 常用插件有哪些?

    作者:顾城链接:https://www.zhihu.com/question/21917526/answer/19747259来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...

  8. em和px区别

    附:(http://www.cnblogs.com/leejersey/p/3662612.html) em单位说明 1em指的是一个字体的大小,它会继承父级元素的字体大小,因此并不是一个固定的值.任 ...

  9. 【Mood-15】DailyBuild 1月

    keywords: AsyncImageLoader universal-image-loader 2015-01-07 AsyncImageLoader:异步动态加载网络图片  类似listview ...

  10. day008-File文件

    1. File 文件和目录路径名的抽象表示形式. 一个File类对象就代表了一个文件或文件夹. 1.1 File类的作用 用来操作硬盘上的文件或文件夹 绝对路径:一般是以盘符开始的,比如:C:/Jav ...