zoukankan      html  css  js  c++  java
  • 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扩展方法进行二级排序。

    1. LINQ包含五个排序算子:OrderByOrderByDescendingThenByThenByDescendingReverse
    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方法中的第一个参数用于指定内部序列,即standardListJoin方法的第二个和第三个参数用于指定一个字段,其值应该使用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>。

            

     CastAsEnumerable <T>完全相同。它将源对象转换为IEnumerable <T>。

    ToArray:ToArray(),ToList(),ToDictionary():

          ToArray(),ToList(),ToDictionary()方法分别将源对象转换为数组,List或Dictionary。

        

     附加:

    Let 关键字

    “let”关键字在查询语法中很有用。它会投影一个新的范围变量,允许重新使用表达式并使查询更具可读性。

    例如: 这里需要写,两遍   let可以看成在查询语法里面申明一个变量。

     

    Into  关键字    

    分组里面也可以使用Into关键字

      

        

  • 相关阅读:
    5.6移植Madplay到开发板
    5.4.Makefile
    5.3交叉工具链使用
    5.2嵌入式linux程序编译与调试
    5.1Minicom 通信配置-linux环境
    7.点亮led的操作
    6、异常向量表的学习---设置SVC模式
    4.协处理器访问指令
    3.Arm机器码
    android RelativeLayout控件或view实现叠加效果
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/7976451.html
Copyright © 2011-2022 走看看