您的位置:首页 > 其它

自己学习LINQ记录(二)

2013-11-28 17:19 176 查看

LINQ查询表达式

查询表达式总是以from子句开始,以select或者group子句结束。
From子句定义了查询的范围变量(range variable),可以认为该变量是对输入sequence的一个遍历,就像foreach做的那样。

IEnumerable<string> inquiryNames = from n in custNames where n.First() == 'C' select n;


以from开始

范围变量

from后面的n就是范围变量,一个范围变量指向当前操作符所对应的输入sequence中的当前元素

可以嵌套select条件或者引入新的变量进行联合查询
运行三种方式引入新的范围变量

let
into
额外的from子句

以下的关键字可以特殊的作用
下面是存在对应查询表达式关键字的运算符:Where、Select、SelectMany、OrderBy、ThenBy、OrderByDescending、ThenByDescending、GroupBy、Join、GroupJoin。



延迟查询

LINQ是延迟执行的

看下这段程序的结果

var numbers = new List<int>();
numbers.Add(1);
IEnumerable<int> query = numbers.Select(n => n * 10);
numbers.Add(2);
foreach (int n in query)
{
Console.Write(n + "|");
}


执行结果
10|20|

这说明在query赋值的时候没有执行LINQ,而是在使用的时候,也就是foreach里面执行的数据。

LINQ是延迟查询的,但也有2种例外的情况。

返回单个元素或者标量值的查询运算符,如First、Count等。
下面这些转换运算符:ToArray、ToList、ToDictionary、ToLookup。

这2种都是立即执行

重复执行

可以反复执行一个查询,但有的时候需要保存数据或者执行时间过长的话应该避免。
可以将结果存入Array,list等。

通过ToList直接存入变量中。

var numbers = new List<int>() { 1, 2 };
List<int> timesTen = numbers.Select(n => n * 10).ToList();
// Executes immediately into a List<int>
numbers.Clear();
Console.Write(timesTen.Count);  // Still 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐