LINQ项目-查询语法
【IT168技术文档】
C# 的现有 foreach 语句通过 .NET Framework 的 IEnumerable/IEnumerator 方法为迭代提供声明性语法。foreach 语句完全是可选的,但经过证实,它是一个非常方便和常用的语言机制。
以此为先例,查询语法 通过声明性语法为以下最常用的查询操作符简化了查询表达式:Where、Select、SelectMany、GroupBy、OrderBy、ThenBy、OrderByDescending 和 ThenByDescending。
下面我们首先看一下本文开头的简单查询:
使用查询语法,我们可以按如下方式重新编写这个语句:IEnumerable expr = names .Where(s => s.Length == 5) .OrderBy(s => s) .Select(s => s.ToUpper());
与 C# 的 foreach 语句一样,查询语法表达式更加简洁、易读,但完全是可选的。每个可以用查询语法编写的表达式都有一个相应的使用点标记的语法(虽然较为冗长)。IEnumerable expr = from s in names where s.Length == 5 orderby s select s.ToUpper();
下面,我们首先看一下查询表达式的基本结构。C# 中的每个语法查询表达式都以 from 子句开始,以 select 或 group 子句结束。最初的 from 子句后可以跟随零个或多个 from 或 where 子句。每个 from 子句都是一个在序列中引入迭代变量的生成器,每个 where 子句都是一个从结果中排除项目的筛选器。最终的 select 或 group 子句之前可能会添加指定结果顺序的 orderby 子句。单个查询表达式的简化语法如下所示:
例如,请考虑以下两个查询表达式:from itemName in srcExpr ((from itemName in srcExpr) | (where predExpr))* (orderby (keyExpr (ascending|descending)?)+)? ((select selExpr) | (group selExpr by keyExpr))
编译器处理这些查询表达式的方式,就好像它们是使用以下显式点标记编写的:var query1 = from p in people where p.Age > 20 orderby p.Age descending, p.Name select new { p.Name, Senior = p.Age > 30, p.CanCode }; var query2 = from p in people where p.Age > 20 orderby p.Age descending, p.Name group new { p.Name, Senior = p.Age > 30, p.CanCode } by p.CanCode;
var query1 = people.Where(p => p.Age > 20) .OrderByDescending(p => p.Age) .ThenBy(p => p.Name) .Select(p => new { p.Name, Senior = p.Age > 30, p.CanCode }); var query2 = people.Where(p => p.Age > 20) .OrderByDescending(p => p.Age) .ThenBy(p => p.Name) .GroupBy(p => p.CanCode, p => new { p.Name, Senior = p.Age > 30, p.CanCode });
0
相关文章