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;