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