linq查询的执行流程

Lal*_*tya 0 .net c# linq

情况1

var numbers = new List<int>();
numbers.Add (1);
IEnumerable<int> query = numbers.Select (n => n * 10);    // Build query
numbers.Add (2);

//Use or execute query  
Run Code Online (Sandbox Code Playgroud)

案例2

var numbers = new List<int>() { 1, 2 };
numbers.Add(4);
List<int> query  = numbers
  .Select (n => n * 10) 
  .ToList();                      // Executes immediately into a List<int>
numbers.Add(3);
numbers.Clear();

//Use or execute query
Run Code Online (Sandbox Code Playgroud)

为什么在第一种情况下查询包含1,2

在第二种情况下查询只包含1,2,4但不包含3,是因为我们正在调用.ToList()方法.

Dar*_*rov 5

这是因为在你开始枚举结果集之前不会执行查询(通过调用.ToArray(),. ToList(),或者只是编写一个foreach)

IEnumerable<int> query = numbers.Select (n => n * 10);
Run Code Online (Sandbox Code Playgroud)

没有执行任何事情.这是LINQ的懒惰本质.