呼和浩特城乡建设网站,企业网站建设的主要目的是,seo整站优化网站建设,wordpress google 360插件书写LINQ查询时又两种语法可供选择#xff1a;方法语法#xff08;Fluent Syntax#xff09;和查询表达式#xff08;Query Expression#xff09;。 LINQ方法语法的本质是通过扩展方法和Lambda表达式来创建查询。C# 3.0对于LINQ表达式还引入了声明式的查询表达式#xf…书写LINQ查询时又两种语法可供选择方法语法Fluent Syntax和查询表达式Query Expression。 LINQ方法语法的本质是通过扩展方法和Lambda表达式来创建查询。C# 3.0对于LINQ表达式还引入了声明式的查询表达式也叫查询语法通常来讲它是创建LINQ查询的更加快捷的方式。尽管通过查询语法写出的查询比较类似于SQL查询但实际上查询表达式的产生并不是建立在SQL之上而是建立在函数式编程语言如LISP和Haskell中的list comprehensions(列表解析)功能之上。本篇会对LINQ查询语法进行详细的介绍。 我们在前一篇LINAQ方法语法中所举的示例获取所有包含字母”a”的姓名按长度排序并将结果转为大写。下面是与之等价的查询表达式语法 static void Main(string[] args) {string[] names { Tom, Dick, Harry, Mary, Jay }; IEnumerablestring query from n in nameswhere n.Contains(a) // Filter elements orderby n n.Length // Sort elements, orderby n 改为 orderby n.Length, 感谢网友搏击的小船发现该处错误 select n.ToUpper(); // Translate each element foreach (string name in query) Console.WriteLine(name); } 查询表达式总是以from子句开始以select或者group子句结束。From子句定义了查询的范围变量range variable可以认为该变量是对输入sequence的一个遍历就像foreach做的那样。下面这幅图描述了查询表达式的完整语法 当然.NET公共语言运行库CLR并不具有查询语法的概念。编译器会在程序编译时把查询表达式转换为方法语法即对扩展方法的调用。这意味着我们用查询表达式写出来的LINQ查询都有等价的方法语法。对于上例中的查询表达式编译器会转换成下面的方法语法 IEnumerablestring query names .Where (n n.Contains(a)) .OrderBy(n n.Length) .Select (n n.ToUpper()); 然后应用编译器对于方法语法的处理规则上面的Where, OrderBy, Select查询运算符会绑定到Enumerable类中的相应扩展方法。 范围变量 范围变量是紧随from关键字之后定义的变量一个范围变量指向当前操作符所对应的输入sequence中的当前元素。在我们的示例中范围变量出现在每一个查询子句中但要注意的是变量实际是对不同sequence的遍历因为Where、OrderBy、Select会有不同的输入sequence IEnumerablestring query from n in names //n是我们定义的范围变量 where n.Contains(a) //n直接来自names array orderby n.Length //n来自filter之后的subsequent select n.ToUpper(); //n来自OrderBy之后的subsequent 当 编译器把上面的查询语法翻译成方法语法后我们会更清楚的看到范围变量的这种行为 IEnumerablestring query2 names .Where(n n.Contains(a)) //n直接来自names array .OrderBy(n n.Length) //n来自filter之后的subsequent .Select(n n.ToUpper()); //n来自OrderBy之后的subsequent 除了from关键字后面的范围变量查询表达式还允许我们通过下面的子句引入新的范围变量 letinto额外的from子句稍后我们会在“LINQ中的子查询、创建策略和数据转换”一篇中讨论他们的使用方法和适用场景。 查询表达式和方法语法 查询表达式和方法语法各有所长。对下面的场景来讲用查询表达式写出来得查询会更加简洁 使用let关键字引入新的范围变量在SelectMany、Join或GroupJoin后引用外部范围变量时在简单的使用Where、OrderyBy、Select时两种语法结构并没有大的差别此时可以根据你的喜好任意选择。 对于只有单个查询运算符组成的查询方法语法会更加简短和易于理解。 最后对于没有对应查询表达式关键字的查询运算符我们就只能选择方法语法了。下面是存在对应查询表达式关键字的运算符Where、Select、SelectMany、OrderBy、ThenBy、OrderByDescending、ThenByDescending、GroupBy、Join、GroupJoin。 组合查询语法 当一个查询运算符没有对应的查询语法时我们可以组合使用查询语法和方法语法。唯一的约束是查询中的每一个查询语法部分必须是完整的如以from开始以select或group结束。如下例 string[] names { Tom, Dick, Harry, Mary, Jay };// 计算包含字母”a”的姓名总数 int matches (from n in names where n.Contains(a) select n).Count(); // 3// 按字母顺序排序的第一个名字 string first (from n in names orderby n select n).First(); // Dick 这种组合语法通常在书写更加复杂的查询时会具有优势像上面这种简单的查询我们只需要使用方法语法就能收到很好的效果 int matches names.Where(n n.Contains(a)).Count(); // 3 string first (names.OrderBy(n n)).First(); // Dick 系列博客导航 LINQ之路系列博客导航 LINQ之路 1LINQ介绍 LINQ之路 2C# 3.0的语言功能上 LINQ之路 3C# 3.0的语言功能下 LINQ之路 4LINQ方法语法 LINQ之路 5LINQ查询表达式 LINQ之路 6延迟执行(Deferred Execution) LINQ之路 7子查询、创建策略和数据转换 LINQ之路 8解释查询Interpreted Queries LINQ之路 9LINQ to SQL 和 Entity Framework上 LINQ之路10LINQ to SQL 和 Entity Framework下 LINQ之路11LINQ Operators之过滤(Filtering) LINQ之路12LINQ Operators之数据转换(Projecting) LINQ之路13LINQ Operators之连接(Joining) LINQ之路14LINQ Operators之排序和分组(Ordering and Grouping) LINQ之路15LINQ Operators之元素运算符、集合方法、量词方法 LINQ之路16LINQ Operators之集合运算符、Zip操作符、转换方法、生成器方法 LINQ之路17LINQ to XML之X-DOM介绍 LINQ之路18LINQ to XML之导航和查询 LINQ之路19LINQ to XML之X-DOM更新、和Value属性交互 LINQ之路20LINQ to XML之Documents、Declarations和Namespaces LINQ之路21LINQ to XML之生成X-DOMProjecting LINQ之路系列博客后记 转载于:https://www.cnblogs.com/lifepoem/archive/2011/10/28/2227735.html