LINQ 速查

常用 LINQ 表达式

标准查询运算符 说明 返回类型 立即执行 延迟流式处理 延迟非流式处理 示例
Where 筛选满足条件的元素 IEnumerable<T> list.Where(x => x.Age > 20)
Select 投影每个元素 IEnumerable<T> list.Select(x => x.Name)
OrderBy 按升序排序 IOrderedEnumerable<TElement> list.OrderBy(x => x.Name)
OrderByDescending 按降序排序 IOrderedEnumerable<TElement> list.OrderByDescending(x => x.Age)
ThenBy 次级升序排序 IOrderedEnumerable<TElement> list.OrderBy(x => x.Age).ThenBy(x => x.Name)
ThenByDescending 次级降序排序 IOrderedEnumerable<TElement> list.OrderBy(x => x.Age).ThenByDescending(x => x.Name)
GroupBy 按键分组 IEnumerable<IGrouping<TKey, TElement>> list.GroupBy(x => x.Category)
First 获取第一个元素(可带条件) TSource new[] {1,2,3}.First()→ 1
FirstOrDefault 获取第一个元素或默认值 TSource? new int[0].FirstOrDefault()→ 0
Last 获取最后一个元素 TSource new[] {1,2,3}.Last()→ 3
LastOrDefault 获取最后一个元素或默认值 TSource? new int[0].LastOrDefault()→ null
Single 返回唯一元素(否则抛异常) TSource new[] {5}.Single()→ 5
SingleOrDefault 返回唯一元素或默认值 TSource? new int[0].SingleOrDefault()→ 0
Count 返回集合中元素的数量 Int32 new[] {1,2,3}.Count()→ 3
Any 判断集合中是否有满足条件的元素 Boolean new[] {1,2,3}.Any(x => x > 2)→ true
All 判断是否所有元素都满足条件 Boolean new[] {2,4,6}.All(x => x % 2 == 0)→ true
Sum 求和 单个数值 new[] {1,2,3}.Sum()→ 6
Average 计算平均值 单个数值 new[] {2,4,6}.Average()→ 4.0
Max 获取最大值 TSourceTResult? new[] {1,3,2}.Max()→ 3
Min 获取最小值 TSourceTResult? new[] {1,3,2}.Min()→ 1
Take 获取前 N 个元素 IEnumerable<T> new[] {1,2,3}.Take(2)→ [1,2]
Skip 跳过前 N 个元素 IEnumerable<T> new[] {1,2,3}.Skip(1)→ [2,3]
TakeWhile 获取满足条件的连续元素 IEnumerable<T> new[] {2,4,5,6}.TakeWhile(x => x % 2 == 0)→ [2,4]
SkipWhile 跳过满足条件的元素直到遇到不满足的 IEnumerable<T> new[] {2,4,6,7}.SkipWhile(x => x % 2 == 0)→ [7]
Distinct 返回不重复的元素 IEnumerable<T> new[] {1,1,2}.Distinct()→ [1,2]
Concat 连接两个序列 IEnumerable<T> seq1.Concat(seq2)
Union 返回两个集合的并集 IEnumerable<T> seq1.Union(seq2)
Intersect 返回两个集合的交集 IEnumerable<T> seq1.Intersect(seq2)
Except 返回在第一个集合但不在第二个中的元素 IEnumerable<T> seq1.Except(seq2)
Contains 判断集合是否包含某个元素 Boolean new[] {1,2,3}.Contains(2)→ true
ElementAt 获取指定索引位置的元素 TSource new[] {10,20,30}.ElementAt(1)→ 20
ElementAtOrDefault 获取指定索引元素,若越界则返回默认值 TSource? new[] {10,20}.ElementAtOrDefault(5)→ null
DefaultIfEmpty 如果集合为空,则返回默认值的单元素集合 IEnumerable<T> emptySeq.DefaultIfEmpty(0)
Reverse 反转序列顺序 IEnumerable<T> new[] {1,2,3}.Reverse()→ [3,2,1]
ToList 转换为列表 IList<T> list.ToList()
ToArray 转换为数组 TSource[] 数组 list.ToArray()
ToDictionary 转换为字典 Dictionary<TKey, TValue> list.ToDictionary(x => x.Id)
ToLookup 创建查找表(多值映射) ILookup<TKey, TElement> list.ToLookup(x => x.Category)
Cast 将非泛型集合转换为指定类型的泛型集合 IEnumerable<T> nonGenericList.Cast<string>()
AsEnumerable 强制将非泛型集合转换为泛型 IEnumerable IEnumerable<T> dataTable.AsEnumerable()
OfType 筛选特定类型的元素 IEnumerable<T> mixedList.OfType<string>()
Range 生成一个整数范围的序列 IEnumerable<T> Enumerable.Range(1,5)→ [1,2,3,4,5]
Repeat 重复指定值 N 次 IEnumerable<T> Enumerable.Repeat("A", 3)→ ["A","A","A"]
Empty 返回空的泛型序列 IEnumerable<T> Enumerable.Empty<int>()
SequenceEqual 判断两个序列是否相等 Boolean seq1.SequenceEqual(seq2)
Aggregate 对集合中的元素应用累加函数 TSource new[] {1,2,3}.Aggregate((a,b) => a + b)→ 6
Join 基于键进行内连接 IEnumerable<T> seq1.Join(seq2, ...)
GroupJoin 执行左外连接并按组输出 IEnumerable<T> outer.Join(inner, ...)

https://learn.microsoft.com/zh-cn/dotnet/csharp/linq/get-started/introduction-to-linq-queries#classification-table
https://www.cnblogs.com/Can-daydayup/p/18824060

上一篇
下一篇