LINQ表达式在定义以后,也只是一个定义,其对集合的“查询”在这个时候其实是没有进行的,实际的动作发生在定义之后对这个定义进行操作的时候。这就是所谓的延时执行:
有例为证:
Code
List<Employee> emps = new List<Employee>()
{
new Employee(){ id="1001", name="ivan", dept="isd", tel="1021"},
new Employee(){ id="1002", name="ivan", dept="isd", tel="1021"},
};
var query = from e in emps
select e;
emps.Add(new Employee(){ id="1003", name="ivan", dept="isd", tel="1021"});
Console.WriteLine(query.Count());
运行一下,就可以知道,此Count为3,而不是2.
如果想要LINQ在定义的时候就对结果进行“存储”,可以利用ToList, ToArray等转换运算符。
Code
var query2=from e in emps.ToList<Employee>()
select e;
emps.Add(new Employee() { id = "1004", name = "ivan", dept = "isd", tel = "1021" });
Console.WriteLine(query2.Count());