通过F11清晰查看Linq的延迟查询
2011-11-24 14:53 Ref Tian 阅读(184) 评论(0) 编辑 收藏 举报Linq的延迟查询实质是在需要的时候才会取出需要的数据,下面通过一个简单的例子+F11的逐语句调试清晰的展现:
int[] number = {1,5,6,8,9}; IEnumerable<int> getnumber = number.Where(i => i >= 6);//1.处通过F11执行时此处只执行一次。 foreach (int i in getnumber)//2.当进行循环显示时此处会返回到1处继续执行,然后依次取出i { MessageBox.Show(i.ToString()); } number[0] = 15; foreach (int i in getnumber) { MessageBox.Show(i.ToString()); }
这如语句中的注释,通过调试可以清楚的看到语句的执行顺序,在number【0】=15;改变源数据后结果同样会被改变。这样的执行方式如果查询语句中有异常编译的时候是没有问题的,除非你运行了这段代码否则你不会发现任何异常,如果你不想执行这样的延迟查询,你可以通过ToArray.ToList等操作将数据直接抓出,看下面的代码:
int[] number = {1,5,6,8,9}; List<int> numberlist = number.Where(i => i >= 6).ToList();//1.此時程式則會直接查詢出相應的結果而不會再進行緩存動作,在i >= 6处会执行多次,以便直接取出相应的信息 foreach (int i in numberlist)//2.此处代码没有重新返回到1处执行 { MessageBox.Show(i.ToString()); } //此時改變他的數值看其中的結果會怎樣 number[0] = 55; foreach (int i in numberlist) { MessageBox.Show(i .ToString()); }
此段代码的执行解释如注释,而改变数据源之后再次输出结果,你会发现其结果没有发生变化,通过以上代码+F11你可以清晰的看到Linq的延迟执行。