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