![LINQ Tutorial](/linq/images/linq-mini-logo.jpg)
LINQ - 查询操作符
一组构成查询模式的扩展方法称为LINQ标准查询操作符。作为LINQ查询表达式的构建块,这些操作符提供了多种查询功能,例如过滤、排序、投影、聚合等。
LINQ标准查询操作符可以根据其功能分为以下几类。
- 过滤操作符
- 连接操作符
- 投影操作
- 排序操作符
- 分组操作符
- 转换
- 连接
- 聚合
- 量词操作
- 分区操作
- 生成操作
- 集合操作
- 相等性
- 元素操作符
过滤操作符
过滤是一种限制结果集的操作,以便它只包含满足特定条件的选定元素。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
where | 根据谓词函数过滤值 | where | Where |
OfType | 根据值能否转换为指定类型来过滤值 | 不适用 | 不适用 |
连接操作符
连接是指一种操作,其中目标是数据源,这些数据源之间以直接方式难以跟踪其关系。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
Join | 该操作符基于匹配的键连接两个序列 | join … in … on … equals … | From x In …, y In … Where x.a = y.a |
GroupJoin | 连接两个序列并对匹配的元素进行分组 | join … in … on … equals … into … | Group Join … In … On … |
投影操作
投影是一种操作,其中对象被转换成一个全新的形式,只包含特定的属性。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
Select | 该操作符基于转换函数投影值 | select | Select |
SelectMany | 该操作符投影基于转换函数的值序列,并将它们展平为单个序列 | 使用多个 from 子句 | 使用多个 From 子句 |
排序操作符
排序操作允许根据一个或多个属性对序列的元素进行排序。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
OrderBy | 该操作符按升序排序值 | orderby | Order By |
OrderByDescending | 该操作符按降序排序值 | orderby ... descending | Order By ... Descending |
ThenBy | 执行二次升序排序 | orderby …, … | Order By …, … |
ThenByDescending | 执行二次降序排序 | orderby …, … descending | Order By …, … Descending |
Reverse | 反转集合中元素的顺序 | 不适用 | 不适用 |
分组操作符
这些操作符根据共同的共享属性将数据放入一些组中。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
GroupBy | 将项目序列组织成组,并将其作为 IGrouping<key, element> 类型的 IEnumerable 集合返回。 | group … by -or- group … by … into … | Group … By … Into … |
ToLookup | 执行分组操作,其中返回键值对序列 | 不适用 | 不适用 |
转换
这些操作符更改输入对象的类型,并用于各种各样的应用程序。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
AsEnumerable | 将输入类型返回为 IEnumerable<T> | 不适用 | 不适用 |
AsQueryable | 将 (泛型) IEnumerable 转换为 (泛型) IQueryable | 不适用 | 不适用 |
Cast | 将集合的元素强制转换为指定类型 | 使用显式类型的范围变量。例如:from string str in words | From … As … |
OfType | 根据值能否转换为特定类型来过滤值 | 不适用 | 不适用 |
ToArray | 强制执行查询并将集合转换为数组 | 不适用 | 不适用 |
ToDictionary | 基于键选择器函数将元素设置到 Dictionary<TKey, TValue> 中,并强制执行 LINQ 查询 | 不适用 | 不适用 |
ToList | 通过将集合转换为 List<T> 来强制执行查询 | 不适用 | 不适用 |
ToLookup | 强制执行查询,并基于键选择器函数将元素放入 Lookup<TKey, TElement> 中 | 不适用 | 不适用 |
连接
执行两个序列的连接,在其操作方面与 Union 操作符非常相似,只是它不删除重复项。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
Concat | 连接两个序列以形成单个序列。 | 不适用 | 不适用 |
聚合
执行任何类型的所需聚合,并允许在 LINQ 中创建自定义聚合。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
Aggregate | 对集合的值进行操作以执行自定义聚合操作 | 不适用 | 不适用 |
Average | 计算值集合的平均值 | 不适用 | Aggregate … In … Into Average() |
Count | 计算集合中满足谓词函数的元素个数 | 不适用 | Aggregate … In … Into Count() |
LongCount | 计算大型集合中满足谓词函数的元素个数 | 不适用 | Aggregate … In … Into LongCount() |
Max | 查找集合中的最大值 | 不适用 | Aggregate … In … Into Max() |
Min | 查找集合中的最小值 | 不适用 | Aggregate … In … Into Min() |
Sum | 查找集合中值的总和 | 不适用 | Aggregate … In … Into Sum() |
量词操作
这些操作符返回布尔值,即 True 或 False,具体取决于序列中的一些或所有元素是否满足特定条件。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
All | 如果序列的所有元素都满足谓词条件,则返回“True”值 | 不适用 | Aggregate … In … Into All(…) |
Any | 通过搜索序列来确定序列中的任何元素是否满足指定条件 | 不适用 | Aggregate … In … Into Any() |
Contains | 如果找到序列中存在特定元素,则返回“True”值;如果序列中不包含该特定元素,则返回“false”值 | 不适用 | 不适用 |
分区操作符
将输入序列分成两个单独的部分,而不重新排列序列的元素,然后返回其中一个部分。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
Skip | 跳过序列中指定数量的元素,并返回其余元素 | 不适用 | Skip |
SkipWhile | 与 Skip 相同,唯一的例外是跳过的元素数量由布尔条件指定 | 不适用 | Skip While |
Take | 从序列中获取指定数量的元素,并跳过其余元素 | 不适用 | Take |
TakeWhile | 与 Take 相同,只是获取的元素数量由布尔条件指定 | 不适用 | Take While |
生成操作
生成操作符创建新的值序列。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
DefaultIfEmpty | 应用于空序列时,在序列中生成默认元素 | 不适用 | 不适用 |
Empty | 返回一个空值序列,是最简单的生成操作符 | 不适用 | 不适用 |
Range | 生成包含整数或数字序列的集合 | 不适用 | 不适用 |
Repeat | 生成包含特定长度重复值的序列 | 不适用 | 不适用 |
集合操作
集合操作有四个操作符,每个操作符根据不同的条件产生结果。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
Distinct | 通过过滤任何重复数据,从集合中生成唯一值的列表 | 不适用 | Distinct |
Except | 比较两个集合的值,并返回一个集合中不在另一个集合中的值 | 不适用 | 不适用 |
Intersect | 返回在两个单独集合中被发现相同的数值集合 | 不适用 | 不适用 |
Union | 将两个不同集合的内容组合成单个列表,而且不包含任何重复内容 | 不适用 | 不适用 |
相等性
比较两个句子(可枚举的)并确定它们是否完全匹配。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
SequenceEqual | 如果发现两个序列彼此相同,则返回布尔值 | 不适用 | 不适用 |
元素操作符
除了 DefaultIfEmpty 之外,其余八个标准查询元素操作符都从集合中返回单个元素。
操作符 | 描述 | C# 查询表达式语法 | VB 查询表达式语法 |
---|---|---|---|
ElementAt | 返回集合中特定索引中存在的元素 | 不适用 | 不适用 |
ElementAtOrDefault | 与 ElementAt 相同,只是如果特定索引超出范围,它还会返回默认值 | 不适用 | 不适用 |
First | 检索集合中的第一个元素或满足特定条件的第一个元素 | 不适用 | 不适用 |
FirstOrDefault | 与 First 相同,只是如果不存在此类元素,它还会返回默认值 | 不适用 | 不适用 |
Last | 检索集合中存在的最后一个元素或满足特定条件的最后一个元素 | 不适用 | 不适用 |
LastOrDefault | 与 Last 相同,只是如果不存在任何此类元素,它还会返回默认值 | 不适用 | 不适用 |
Single | 返回集合的单个元素或满足特定条件的单个元素 | 不适用 | 不适用 |
SingleOrDefault | 与 Single 相同,只是如果不存在任何此类单个元素,它还会返回默认值 | 不适用 | 不适用 |
DefaultIfEmpty | 如果集合或列表为空或为 null,则返回默认值 | 不适用 | 不适用 |
广告