LINQ查询操作
5.1 查询操作概述
LIQN提供的查询操作可以分为:筛选操作、投影操作、排序操作、聚合操作、集合操作、元素操作、数据类型转换操作、生成操作、限定符操作、数据分区操作、联接操作、相等操作、串联操作等
5.2 筛选操作where
5.3 投影操作
Select操作:将数据源中的元素投影到新序列中,并指定元素的类型和表现形式。
SelectMany操作:将数据源中的元素投影到新序列中,并指定元素的类型和表现形式。而且SelectMany操作可以将一个函数应用到多个序列之上,并将结果合并为一个序列。
5.4 排序操作
.BoderBy操作:根据关键字对序列中的元素按升序排列
.OrderByDescending操作:根据关键字对序列中的元素按降序排列
.ThenBy操作:根据次要关键字对序列中的元素按升序排列
.ThenByDescending:根据次要关键字对序列中的元素按降序排列
.Reverse操作:将序列中的元素的顺序进行反转
5.5 聚合操作
.Count操作:计算序列中元素的数量,或者计算序列满足一定条件的元素的数量
.Sum操作:计算序列中元素的和
.Max操作:计算序列中元素的最大值
.Min操作:计算序列中元素的最小值
.Average操作:计算序列中元素的平均值
.Aggregate操作:对集合中的元素进行自定义的聚合计算
.LongCount操作:计算序列中元素的数量,或者计算序列满足一定条件的元素的数量。一般计算大型集合中的元素的数量
5.6 集合操作
在LINQ中,集合操作是指对一个序列或多个序列本身的操作,如去掉重复元素、计算两个集合的交集等操作,包括以下4中操作:
.Distinct操作:可以去掉数据源中重复的元素,并返回一个新序列。另外,它还可以指定一个比较器来比较两个元素是否相同
.Except操作:可以计算两个集合的差集(属于一个集合而不属于另外一个集合中元素组成的集合)
.Intersect操作:可以计算两个集合的交集
.Union操作:可以计算两个集合的并集
5.7 元素操作
在LINQ中,元素操作可以获取序列中一个特定的元素,包括以下8中操作:
.ElementAt操作:返回集合中指定索引处的元素
.ElementAtOrDefault操作:返回集合中指定索引处的元素。如果索引超出集合的返回默认值
.First操作:返回集合的第一个元素,或者返回集合的满足指定条件的第一个元素
.FirstOrDefault操作:返回集合的第一个元素,或者返回集合的满足指定条件的第一个元素。如果不存在满足该条件的元素,则返回默认元素
.Last操作:返回集合的最后一个元素,或者返回集合的满足指定条件的最后一个元素
.LastOrDefault操作:返回集合的最后一个元素,或者返回集合的满足指定条件的最后一个元素。如果不存在满足该条件的元素,则返回默认元素
.Single操作:返回集合的唯一元素,或者返回集合的满足指定条件的唯一元素
.SingleOrDefault操作:返回集合的唯一元素,或者返回集合的满足指定条件的唯一元素。如果不存在满足该条件的元素,则返回默认元素
5.8 数据类型转换操作
在LINQ中,数据类型转换操作可以将数据的类型或者其它元素的类型转换为用户指定的类型:包括以下8种操作:
.AsEnumerable操作:可以将数据源转换为IEnumerable<T>类型的序列
.AsQueryable操作:可以将数据源转换为IQueryable<T>或者IQueryable类型 的序列
.Cast操作:将序列中的元素的类型转换为指定的类型(由TResult参数指定)
.OfType操作:从序列中筛选指定类型的元素,并构建为一个序列
.ToList操作:将IEnumerable<T>类型的序列转换为List<T>类型的序列
.ToArray操作:将IEnumerable类型的序列转换为T[]类型的数组
.ToDicionary操作:按照键值将序列中的元素放入一对一的字典序列 (Dictionary<TKey,TValue>)中
.ToLookup操作:按照键值将序列中的元素放入一对多的字典序列 (Lookup<TKey,TValue>)中
5.9 生成操作
在LINQ中,生成操作能够产生指定的新序列,包括以下4种操作:
DefaultIfEmpty操作:返回IEnumerable<T>类型的序列。如果序列为空,则返回只包含一个元素(值为默认值或者指定的值)的序列
Empty操作:返回IEnumerable<T>类型的空序列
Range操作:返回指定范围的数字序列
Repeat操作:返回IEnumerable<T>类型的包含一个重复值的序列
5.10 限定符操作
在LINQ中,限定操作符可以检测序列中是否存在满足指定条件的元素,或者检测序列中的所有元素满足指定的条件。限定符操作返回一个布尔值,包含以下3种操作:
.All操作:检测序列中的所有元素是否都满足指定的条件。如果满足,返回true;否则返回false
.Any操作:检测序列中是否存在满足指定条件的元素。如果存在,则返回true,否则返回false
.Contains操作:检测序列中是否存在指定的元素。如果存在,返回true;否则返回false
5.11 数据分区操作
在LINQ中,数据分区操作可以在不改变序列元素之间的顺序的条件下,将序列的元素分为两个部分,把其中一个部分的元素构建为一个新序列并返回。数据分区操作包括以下4个操作:
.Skip操作:跳过数据源(序列)中指定数量的元素,然后返回由数据源(序列)剩余的元素组成的序列
.SkipWhile操作:跳过数据源(序列)中满足指定条件的元素,然后返回由数据源(序列)剩余的元素组成的序列
.Take操作:从数据源(序列)开头开始提取指定数量的元素,然后返回由这些元
素组成的序列
.TakeWhile操作:从数据源(序列)的开头开始提取满足指定条件的元素,然后返回由这些元素组成的序列
5.12 联接操作
.Join联接:要求元素的联接关系必须同时满足被联接的两个数据源,和SQL语句中的INNER JOIN子句相似
.GroupJoin联接:它产生分层数据结构,将第一个集合中的每个元素与第二个集合中的一组相关元素进行匹配。在查询结果中,第一个集合中的元素都会出现在查询结果中。如果第一个集合中的元素在第二个集合中找到相关元素,则使用被找到的元素,否则使用空
5.13 相等操作
SequenceEqual操作可以判断两个序列是否相等。判断两个序列是否相等,必须满足两个条件:
(1) 两个序列的长度相等;
(2) 两个序列的对应元素相等
5.14 串联操作
序列的串联操作是指:将一个序列的元素全部追加到另一个序列中,并构成一个新序列。使用Contact()实现。