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
SelectMany 该运算符投射基于转换函数的值序列,并将它们展平为单个序列 使用多个 from 子句 使用多个 From 子句

排序运算符

排序操作允许根据一个或多个属性对序列中的元素进行排序。

显示示例

运算符 描述 C# 查询表达式语法 VB 查询表达式语法
OrderBy 运算符按升序对值进行排序 orderby Order By
OrderByDescending 运算符按降序对值进行排序 orderby ... desc Order By ... desc
ThenBy 按升序执行二次排序 orderby …, … Order By …, …
ThenByDescending 按降序执行二次排序 orderby …, … desc Order By …,… desc
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 不适用 不适用
转换 将集合中的元素转换为指定类型 使用明确类型的范围变量。例如: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 计算值集合的平均值 不适用 将...聚合到...Average()
Count 计算集合中满足谓词函数的元素 不适用 将...聚合到...Count()
LonCount 计算元素满足大型集合中的谓词函数 不适用 将...聚合到...LongCount()
Max 找出集合中的最大值 不适用 将...聚合到...Max()
Min 找出集合中存在的最小值 不适用 将...聚合到...Min()
Sum 找出集合中值的总和 不适用 将...聚合到... … 进入 Sum()

量词操作

当序列中的部分或全部元素满足特定条件时,这些运算符将返回布尔值,即 True 或 False。

显示示例

运算符 描述 C# 查询表达式语法 VB 查询表达式语法
All 如果序列中的所有元素都满足谓词条件,则返回值"True" 不适用 将…聚合到…全部(…)
Any 通过搜索序列确定序列中的任何元素是否满足指定条件 不适用 将…聚合到… 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 将两个不同集合的内容合并为一个列表,并且没有任何重复内容 Not Applicable Not Applicable

相等

比较两个句子(可枚举)并确定它们是否完全匹配。

显示示例

运算符 描述 C# 查询表达式语法 VB 查询表达式语法
SequenceEqual 如果发现两个序列彼此相同,则结果为布尔值 不适用 不适用

元素运算符

除 DefaultIfEmpty 外,其余八个标准查询元素运算符均返回集合中的单个元素。

显示示例

运算符 描述 C# 查询表达式语法 VB 查询表达式语法
ElementAt 返回特定索引中存在的元素集合 不适用 不适用
ElementAtOrDefault 与 ElementAt 相同,但当特定索引超出范围时,它还会返回默认值 不适用 不适用
First 检索集合中的第一个元素或满足特定条件的第一个元素 不适用 不适用
FirstOrDefault 与 First 相同,但当不存在此类元素时,它还会返回默认值 不适用 不适用
Last 检索集合中存在的最后一个元素或满足特定条件的最后一个元素 不适用 不适用
LastOrDefault 与 Last 相同,只是如果不存在任何此类元素,它还会返回默认值 不适用 不适用
Single 返回集合中的唯一元素或满足特定条件的唯一元素 不适用 不适用
SingleOrDefault 与 Single 相同,但如果不存在任何此类单独元素,它还会返回默认值 不适用 不适用
DefaultIfEmpty 如果集合或列表为空或 null,则返回默认值 不适用 不适用