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,则返回默认值 不适用 不适用
广告