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