概念:语言集成查询(Language Integrated Query,Linq)在C#中集成了查询语法,可以用相同的语法访问不同的数据源。Linq提供了不同数据源的抽象层,所以可以使用相同的语法。
并不是所有的查询都可以用Linq查询语法完成。也不是所有的拓展方法都映射到Linq查询子句上。高级查询需要使用拓展方法。
Linq有两种语法风格:
- “查询语法(Query Syntax)”,这种语法格式类似于SQL查询。
- “点语法(Dot-nontation Syntax)”,这种语法是基于拓展方法的。
“查询语法”的格式:查询表达式必须以from开头,以select或group结束。在这两个子句中间可以使用where,orderby,join,let和其他from子句。
Linq有的方法有延迟的特性,这个特性的效果是直到对结果进行遍历,才会执行该查询。
拓展方法 | 描述 | 延迟 |
All | 如果数据源的所有条目都与谓词匹配,则返回true | 否 |
Any | 如果数据源至少有一个条目与谓词匹配,则返回true | 否 |
Contains | 如果数据源包含指定的条目或值,返回true | 否 |
Count | 返回数据源的条目数 | 否 |
First | 返回数据源的第一个条目 | 否 |
FirstOrDefault | 返回数据源的第一个条目,或无条目时,返回默认值 | 否 |
Last | 返回数据源最后一个条目 | 否 |
LastOrDefault | 返回数据源最后一个条目,或无条目时,返回默认值 | 否 |
Max或Min | 返回由Lamdba表达式表示的最大值或最小值 | 否 |
OrderBy OrderByDesceding | 基于Lambda表示式返回值对数据源进行排序 | 是 |
Reverse | 反转数据源中数据项的顺序 | 是 |
Select | 设计一个查询结果 | 是 |
SelectMany | 把每个数据项投射到一个条目序列中,然后把所有的这些结果序列连接成一个序列 | 是 |
Single | 返回数据源第一个条目,或者有多个匹配时抛出异常 | 否 |
SingleOrDefault | 返回数据源第一个条目,或无条目时,返回默认值;有多个条目匹配时,抛出一个异常 | 否 |
Skip SkipWhile | 跳过指定数目的元素,或者当谓词匹配时跳过 | 是 |
Sum | 对谓词选定的词求和 | 否 |
Take TakeWhile | 从数据源的开始处选择指定数目的元素,或当谓词匹配时选择条目 | 是 |
ToArray ToDictionary ToList | 把数据源转成数组,字典,列表 | 否 |
Where | 过滤数据源中与谓词不匹配的条目 | 是 |