LINQ教程之LINQ操作语法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LINQ教程之LINQ操作语法
LINQ查询时有两种语法可供选择:查询表达式语法(Query Expression)和⽅法语法(Fluent Syntax)。
⼀、查询表达式语法
查询表达式语法是⼀种更接近SQL语法的查询⽅式。
LINQ查询表达式语法如下:
from<range variable> in <IEnumerable<T> or IQueryable<T> Collection>
<Standard Query Operators> <lambda expression>
<select or groupBy operator> <result formation>
LINQ查询表达式
约束LINQ查询表达式必须以from⼦句开头,以select或group⼦句介绍
关键字功能
from....in...指定要查询的数据源以及范围变量,多个from⼦句则表⽰从多个数据源查找数据。
注意:C#编译器会把“复合from⼦句”的查询表达式转换为SelectMany()扩展⽅法。
join…in…
on…
equals…
指定多个数据源的关联⽅式
let引⼊⽤于存储查询表达式中⼦表达式结果的范围变量。
通常能达到层次感会更好,使代码更易于阅读。
orderby、descending 指定元素的排序字段和排序⽅式。
当有多个排序字段时,由字段顺序确定主次关系,可指定升序和降序两种排序⽅式
where指定元素的筛选条件。
多个where⼦句则表⽰了并列条件,必须全部都满⾜才能⼊选。
每个where⼦句可以使⽤谓词&&、||连接多个条件表达式。
group指定元素的分组字段。
select指定查询要返回的⽬标数据,可以指定任何类型,甚⾄是匿名类型。
(⽬前通常被指定为匿名类型)
into 提供⼀个临时的标识符。
该标识可以引⽤join、group和select⼦句的结果。
1) 直接出现在join⼦句之后的into关键字会被翻译为GroupJoin。
(into之前的查询变量可以继续使⽤)
2) select或group⼦句之后的into它会重新开始⼀个查询,让我们可以继续引⼊where, orderby和select⼦句,它是对分步构建查询表达式的⼀种简写⽅式。
(into之前的查询变量都不可再使⽤)
查询语法从⼀个From⼦句开始,然后是⼀个Range变量。
From⼦句的结构类似于“From rangeVariableName in IEnumerablecollection”。
在英语中,这意味着,从集合中的每个对象。
它类似于foreach循环:foreach(student in studentList)。
在From⼦句之后,您可以使⽤不同的标准查询运算符来过滤,分组,连接集合的元素。
LINQ中有⼤约50个标准查询运算符。
标准查询运算符后⾯通常跟⼀个条件,这个条件通常使⽤lambda表达式来表⽰。
LINQ查询语法总是以Select或Group⼦句结束。
Select⼦句⽤于对数据进⾏整形。
您可以选择整个对象,因为它是或只有它的⼀些属性。
在上⾯的例⼦中,我们选择了每个结果字符串元素。
例如:我们要从数组中查询出偶数,查询表达式⽰例代码如下:
var result = from p in ints where p % 2 == 0 select p;
查询表达式语法要点总结:
1、查询表达式语法与SQL(结构查询语⾔)语法相同。
2、查询语法必须以from⼦句开头,可以以Select或GroupBy⼦句结束。
3、使⽤各种其他操作,如过滤,连接,分组,排序运算符以构造所需的结果。
4、隐式类型变量 - var可以⽤于保存LINQ查询的结果。
⼆、⽅法语法
⽅法语法(也称为流利语法)主要利⽤System.Linq.Enumerable类中定义的扩展⽅法和Lambda表达式⽅式进⾏查询,类似于如何调⽤任何类的扩展⽅法。
以下是⼀个⽰例LINQ⽅法语法的查询,返回数组中的偶数:
var result = ints.Where(p => p % 2 == 0).ToArray();
从上⾯的⽰例代码中可以看出:⽅法语法包括扩展⽅法和Lambda表达式。
扩展⽅法Where()在Enumerable类中定义。
如果你检查Where扩展⽅法的签名,你会发现Where⽅法接受⼀个谓词委托,如Func <Student,bool>。
这意味着您可以传递任何接受Student对象作为输⼊参数的委托函数,并返回⼀个布尔值,如下图所⽰。
lambda表达式作为在Where⼦句中传递的委托传递。
在下⼀节中学习lambda表达式。
三、查询表达式语法VS⽅法语法
查询表达式语法与⽅法语法存在着紧密的关系
1、CLR本⾝并不理解查询表达式语法,它只理解⽅法语法。
2、编译器负责在编译时将查询表达式语法翻译为⽅法语法。
3、⼤部分⽅法语法都有对应的查询表达式语法形式:如Select()对应select、OrderBy()对应orderby
4、部分查询⽅法⽬前在C#中还没有对应的查询语句:如Count()和Max(),这是只能采⽤以下替代⽅案:
⽅法语法
查询表达式语法+⽅法语法的混合⽅式
到此这篇关于LINQ操作语法的⽂章就介绍到这了。
希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。