1 //linq延迟查询。两次查询结果不同 2 List<string> l = new List<string>() { "aaa", "bbb", "ccc" }; 3 var query = l.Select(lstr => new { Name = lstr.ToString() }); //延迟查询,此时还未真正查询产生query 4 foreach (var item in query) //查询真正开始 5 { 6 Console.WriteLine(item); 7 } 8 Console.WriteLine(); 9 10 l.Add("ddd"); 11 foreach (var item in query) //查询再次开始,重新查询list 12 { 13 Console.WriteLine(item); 14 }
第一次输出:
aaa
bbb
ccc
第二次输出
aaa
bbb
ccc
ddd
1 //ToList()立即查询,并产生query 2 List<string> l = new List<string>() { "aaa", "bbb", "cccccc" }; 3 var query = l.Select(lstr => new { Name = lstr.ToString() }).ToList(); //立即查询,此时还未真正查询产生query 4 foreach (var item in query) //只是迭代query,不再查询 5 { 6 Console.WriteLine(item); 7 } 8 Console.WriteLine(); 9 l.Add("ddd"); 10 foreach (var item in query) //只是迭代query,不再查询 11 { 12 Console.WriteLine(item); 13 }
两次都只输出:
aaa
bbb
ccc
而ddd不输出,因为只是迭代query,不是重新查询list