首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

linq子查询-学习linq的文件和笔记(五)

2012-12-31 
linq子查询--学习linq的资料和笔记(五)万事不要操之过急,循序渐进就好。在sql中我们会用到子查询来进行复杂

linq子查询--学习linq的资料和笔记(五)

万事不要操之过急,循序渐进就好。


在sql中我们会用到子查询来进行复杂一些的查询工作,在linq中同样可以使用子查询,不过如果是连接数据库的话使用子查询会只连接一次数据库进行查询,而如果是内存中的数据,则使用子查询会效率低下,每次迭代返回至时都会执行子查询,那么就应该将子查询分离出来。

在linq的方法语法中,子查询包含在父查询的lambda表达式中,即都要写在匿名方法中, 查询表达式  除了from字句不能使用子查询 其他都可以使用子查询

以下内容来自博客园

在创建一个复杂的查询时,通常我们需要用到子查询。相信大家都记得SQL查询里的子查询,在创建LINQ查询时也是如此。在LINQ中,对于方法语法,一个子查询包含在另外一个查询的lambda表达式中,对于查询表达式语法来讲,所有不是from子句中引用的查询都是子查询。

下面的查询使用子查询来对last name进行排序,语句中的n.Split().Last()就是一个子查询:

            string[] names = { "David Tim", "Tony Sin", "Rager Witers" };
IEnumerable<string> query = names.OrderBy(n => n.Split().Last());

子查询的作用域限定在当前的lambda表达式中,并且可以引用外部lambda表达式的参数(查询表达式的范围变量)。

下面的查询获取所有长度最短的名字(注意:可能有多个):


int shortest = names.Min(n => n.Length);            IEnumerable<string> query = from n in names                                        where n.Length == shortest                                        select n;

在延迟执行一篇中,我们说到元素和集合运算符如First和Count会让一个查询立即执行。但对一个子查询来说,即使是元素和集合运算符也不会改变外部查询延迟执行的特性。这是因为,不管是对本地查询还是通过表达式树访问的解释查询,子查询是间接调用的。




热点排行