日期:2014-05-20  浏览次数:20895 次

Linq 延迟执行问题
IEnumerable<char> query = "期望中的结果";
query = query.Where (c => c != 'a');
query = query.Where (c => c != 'e');
query = query.Where (c => c != 'i');
query = query.Where (c => c != 'o');
query = query.Where (c => c != 'u');
new string (query.ToArray()).Dump ("所有元音都被过滤.");
query = "不是期望的结果";

foreach (char vowel in "aeiou")  
 query = query.Where (c => c != vowel);  
new string (query.ToArray()).Dump ("只有u被过滤了");


不知道延迟查询是怎么回事,我知道ToList()可以取消延迟查询。而且在foreach里添加一个变量替换vowel也可以和第一个显示的一样,这是为什么呢?不清楚究竟为什么两个结果不一样?query = query.Where (c => c != vowel);为什么这个query 变量不会存每次过滤后的结果呢?坐等高手!


------解决方案--------------------
探讨

引用:

foreach 的问题,之前好像论坛里有人写过类似的文章。
由于是 延迟加载,最后vowel为u,请求的5个Where都是 c != u,
那 就 添加一个局部变量吧。


我知道添加个可以获取到期望的结果,但是就是想知道为什么会那样?有先前文章的链接吗?