LINQ-进阶的扩展方法
导航
简介
在LINQ中,不是每一次使用LINQ都要进行一步一步写查询来操作的,完全可以通过.NET自带的方法来简单写LINQ查询语句,这些方法都有一些共同性,其类型实现了 IEnumerable<T> 接口或 IQueryable<T> 接口。此外,许多标准查询运算符方法运行所针对的类型不是基于 IEnumerable<T> 或 IQueryable<T> 的类型。 Enumerable 类型定义两个此类方法,这些方法都在类型为 IEnumerable 的对象上运行。 利用这些方法(Cast<TResult>(IEnumerable) 和 OfType<TResult>(IEnumerable)),您将能够在 LINQ 模式中查询非参数化或非泛型集合。 这些方法通过创建一个强类型的对象集合来实现这一点。 Queryable 类定义两个类似的方法(Cast<TResult>(IQueryable) 和 OfType<TResult>(IQueryable)),这些方法在类型为 Queryable 的对象上运行。
扩展方法--投影类
| Reverse | Reverse<TSource> | 反转序列中元素的顺序。 |
| DefaultIfEmpty | DefaultIfEmpty<TSource>(IEnumerable<TSource>) | 返回指定序列的元素;如果序列为空,则返回单一实例集合中的类型参数的默认值。 |
| DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) | 返回指定序列中的元素;如果序列为空,则返回单一实例集合中的指定值。 | |
| Single(OrDefault) | Single(OrDefault)<TSource>(IEnumerable<TSource>) | 返回序列的唯一元素;(如果该序列为空,则返回默认值;)如果该序列并非恰好包含一个元素,则会引发异常。 |
| Single(OrDefault)<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>) | 返回序列中满足指定条件的唯一元素;(如果该序列为空,则返回默认值;)如果有多个这样的元素存在,则会引发异常。 | |
| Empty | Empty<TResult> | 返回一个具有指定的类型参数的空 IEnumerable<T>。 |
| Range | Range | 生成指定范围内的整数的序列。 |
| Repeat | Repeat<TResult> | 生成包含一个重复值的序列。 |
| Select | Select<TSource, TResult>(IEnumerable<TSource>, Func<TSource, TResult>) | 将序列中的每个元素投影到新表中。 |
| Select<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, TResult>) | 通过合并元素的索引将序列的每个元素投影到新表中。 | |
| SelectMany | SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>) | 将序列的每个元素投影到 IEnumerable<T> 并将结果序列合并为一个序列。 |
| SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>) | 将序列的每个元素投影到 IEnumerable<T>,并将结果序列合并为一个序列,并对其中每个元素调用结果选择器函数。 | |
| SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>) | 将序列的每个元素投影到 IEnumerable<T>,并将结果序列合并为一个序列,并对其中每个元素调用结果选择器函数。 每个源元素的索引用于该元素的中间投影表。 |
扩展方法--聚合计算类
| Average&Max&Min&Sum | Average(IEnumerable<TSource>) | 计算值序列的平均值。 |
| Average(IEnumerable<Nullable<TSource>>) | 计算可以为 null 的值序列的平均值。 | |
| Average<TSource>(IEnumerable<TSource>, Func<TSource, Nullable<TSource>>) | 计算可以为 null 的值序列的平均值,该值可通过调用输入序列的每个元素的转换函数获取。 | |
| Average<TSource>(IEnumerable<TSource>, Func<TSource, TSource>) | 计算值序列的平均值,该值可通过调用输入序列的每个元素的转换函数获取。 | |
| Aggregate | Enumerable.Aggregate<TSource> (IEnumerable<TSource>, Func<TSource, TSource, TSource>) | 对序列应用累加器函数。 |
| Enumerable.Aggregate<TSource, TAccumulate> (IEnumerable<TSource>, TAccumulate, Func<TAccumulate, TSource, TAccumulate>) | 对序列应用累加器函数。 将指定的种子值用作累加器初始值。 | |
| Aggregate<TSource, TAccumulate, TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate, TSource, TAccumulate>, Func<TAccumulate, TResult>) | 对序列应用累加器函数。 将指定的种子值用作累加器的初始值,并使用指定的函数选择结果值。 | |
| (Long)Count | Count<TSource>(IEnumerable<TSource>) | 返回序列中的元素数量(Int64)。 |
| Count<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>) | 返回一个数字,表示在指定的序列中满足条件的元素数量(Int64)。 |
扩展方法--判断类
| All | All<TSource> | 确定序列中的所有元素是否满足条件。 |
| Any | Any<TSource>(IEnumerable<TSource>) | 确定序列是否包含任何元素。 |
| Any<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>) | 确定序列中是否存在元素满足条件。 | |
| Contains | Contains<TSource>(IEnumerable<TSource>, TSource) | 通过使用默认的相等比较器确定序列是否包含指定的元素。 |
| SequenceEqual | SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) | 通过使用相应类型的默认相等比较器对序列的元素进行比较,以确定两个序列是否相等。 |
扩展方法--转换类
| ToArray | ToArray<TSource> | 从 IEnumerable<T> 创建一个数组。 |
| ToList | ToList<TSource> | 从 IEnumerable<T> 创建一个 List<T>。 |
| ToDictionary | ToDictionary<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>) | 根据指定的键选择器函数,从 IEnumerable<T> 创建一个 Dictionary<TKey, TValue>。 |
| ToDictionary<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>) | 根据指定的键选择器和元素选择器函数,从 IEnumerable<T> 创建一个 Dictionary<TKey, TValue>。 | |
| ToLookup | ToLookup<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>) | 根据指定的键选择器函数,从 IEnumerable<T> 创建一个 Lookup<TKey, TElement>。 |
| ToLookup<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>) | 根据指定的键选择器和元素选择器函数,从 IEnumerable<T> 创建一个 Lookup<TKey, TElement>。 | |
| AsEnumerable | AsEnumerable<TSource> | 返回类型为 IEnumerable<T> 的输入 |
| Cast | Cast<TResult> | 将 IEnumerable 的元素强制转换为指定的类型。 |
扩展方法--连接类
| Concat | Concat<TSource> | 连接两个序列。 |
| Intersect | Intersect<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) | 通过使用默认的相等比较器对值进行比较生成两个序列的交集。 |
| join | Join<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>) | 基于匹配键对两个序列的元素进行关联。 使用默认的相等比较器对键进行比较。 |
| Union | Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) | 通过使用默认的相等比较器生成两个序列的并集 |
| Zip | Zip<TFirst, TSecond, TResult> | 将指定函数应用于两个序列的对应元素,以生成结果序列。 |
扩展方法--排序类
| OrderBy | OrderBy<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>) | 根据键按升序对序列的元素排序。 |
| OrderByDescending | OrderByDescending<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>) | 根据键按降序对序列的元素排序。 |
| ThenBy | ThenBy<TSource, TKey>(IOrderedEnumerable<TSource>, Func<TSource, TKey>) | 根据某个键按升序对序列中的元素执行后续排序。 |
| ThenByDescending | ThenByDescending<TSource, TKey>(IOrderedEnumerable<TSource>, Func<TSource, TKey>) | 根据某个键按降序对序列中的元素执行后续排序。 |
扩展方法--筛选类
| First&Last | First(Last)<TSource>(IEnumerable<TSource>) | 返回序列中的第一个(最后一个)元素。 |
| First(Last)<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>) | 返回序列中满足指定条件的第一个(最后一个)元素。 | |
| FirstOrDefault&LastOrDefault | First(Last)OrDefault<TSource>(IEnumerable<TSource>) | 返回序列中的第一个(最后一个)元素;如果序列中不包含任何元素,则返回默认值。 |
| First(Last)OrDefault<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>) | 返回序列中满足条件的第一个(最后一个)元素;如果未找到这样的元素,则返回默认值。 | |
| Distinct | Distinct<TSource>(IEnumerable<TSource>) | 通过使用默认的相等比较器对值进行比较返回序列中的非重复元素。 |
| ElementAt | ElementAt<TSource> | 返回序列中指定索引处的元素。 |
| ElementAtOrDefault | ElementAtOrDefault<TSource> | 返回序列中指定索引处的元素;如果索引超出范围,则返回默认值。 |
| Except | Except<TSource>(IEnumerable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) | 通过使用默认的相等比较器对值进行比较生成两个序列的差集。 |
| OfType | OfType<TResult> | 根据指定类型筛选 IEnumerable 的元素。 |
| Skip | Skip<TSource> | 跳过序列中指定数量的元素,然后返回剩余的元素。 |
| SkipWhile | SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>) | 只要满足指定的条件,就跳过序列中的元素,然后返回剩余元素。 |
| SkipWhile<TSource>(IEnumerable<TSource>, Func<TSource, Int32, Boolean>) | 只要满足指定的条件,就跳过序列中的元素,然后返回剩余元素。 将在谓词函数的逻辑中使用元素的索引。 | |
| Take | Take<TSource> | 从序列的开头返回指定数量的连续元素。 |
| TakeWhile | TakeWhile<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>) | 只要满足指定的条件,就会返回序列的元素。 |
| TakeWhile<TSource>(IEnumerable<TSource>, Func<TSource, Int32, Boolean>) | 只要满足指定的条件,就会返回序列的元素。 将在谓词函数的逻辑中使用元素的索引。 | |
| Where | Where<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>) | 基于谓词筛选值序列。 |
| Where<TSource>(IEnumerable<TSource>, Func<TSource, Int32, Boolean>) | 基于谓词筛选值序列。 将在谓词函数的逻辑中使用每个元素的索引。 |
扩展方法--分组类
| GroupBy | GroupBy<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>) | 根据指定的键选择器函数对序列中的元素进行分组。 |
| GroupBy<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>) | 根据指定的键选择器函数对序列中的元素进行分组,并且通过使用指定的函数对每个组中的元素进行投影。 | |
| GroupBy<TSource, TKey, TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TKey, IEnumerable<TSource>, TResult>) | 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值。 | |
| GroupBy<TSource, TKey, TElement, TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>, Func<TKey, IEnumerable<TElement>, TResult>) | 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值。 通过使用指定的函数对每个组的元素进行投影。 | |
| GroupJoin | GroupJoin<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, IEnumerable<TInner>, TResult>) | 基于键相等对两个序列的元素进行关联并对结果进行分组。 使用默认的相等比较器对键进行比较。 |
浙公网安备 33010602011771号