快速业务通道

LINQ学习笔记:复合查询和Lambda表达式语法

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-14

n都是只属于各自Lambda表达式的范围里面的.

查询语法 VS SQL语法

LINQ的复合查询语法看起来和SQL语法非常像, 然后他们是非常不同的. 一个LINQ查询说到底还是一个C#表达式, 因为必须要遵循标准的C#规则. 例如, 在LINQ中, 你不能使用一个未声明的变量. 而在SQL中, 在from语句定义之前你已经可以在select中引用一个表的别名了.

在LINQ中的子查询仅仅是另外一个C#表达式, 因此并不需要有什么特殊的语法. 而子查询在SQL当中通常要受到一些特殊规则的限制.

在LINQ中, 整个数据处理流程是从左到右的. 而在SQL中, 这个顺序则更加随机.

一个LINQ查询构成一个传送带, 或者一个管道, 其中的操作符接受和处理有序序列. 而SQL查询则构成的语法网更多的是处理无序集合.

查询语法和 Lambda表达式

复合查询和Lambda表达式语法更有优点. 复合查询对于符合以下情况的查询更加简单一些:

1. let从句来一个迭代变量后用于代表一个新的变量

   1: var list = new List<int>() { 1, 2, 3 };
   2: var query = from i in list
   3:             let j = i + 2
   4:             let k = j * j
   5:             select new { i, j, k };

 

2. SelectMany, Join或者GroupJoin紧跟着一个外部的迭代变量引用

至于Where, OrderBy和Select的使用, 两种表达语法都可以工作的很好, 如何使用, 更多的取决于个人习惯.

对于那些只由单一操作符构成的查询来说, Lambda表达式语法更加简短,简洁一点.

最后, 有很多的操作符是没有对应的复合查询关键字的, 对于这些操作符你只能使用Lambda表达式语法, 或者至少部分使用, 它们是:

Where, Select, SelectManager, OrderBy, ThenBy, OrderByDescending, ThenByDescending, Group, Join, GroupJoin

混合的查询语法

如果一个查询操作符没有对应的复合查询支持, 你可以混合使用复合查询和Lambda表达式语法. 唯一的限制是每一个复合组件都必须被完成(例如从一个form从句开始并且结束于一个select或者group从句).

例如:

   1: string[] names = { "James","Jack","Harris"};
   2: int myCount = (from n in names
   3:                  where n.Contains ("J")
   4:                  select n
   5:                 ).Count();
   6: Console.WriteLine(myCount); //2

 

有一点是非常重要的, 你不能单一的偏向于喜欢复合查询语法或者Lambda表达式语法, 更多的应该是根据功

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号