当前位置: 移动技术网 > IT编程>开发语言>.net > (转载)IQueryable和IEnumerable

(转载)IQueryable和IEnumerable

2019年04月19日  | 移动技术网IT编程  | 我要评论

木南晴夏,麦饭石滤料,怏怏不乐怎么读

第一篇:https://www.cnblogs.com/zgqys1980/p/4047315.html

第二篇:https://www.cnblogs.com/shenbing/p/5394228.html

第三篇:https://blog.csdn.net/ydm19891101/article/details/50969323

 

第四篇:  (这篇最好,阐释最详尽,最透彻)

下面内容摘自上面第4篇博客,非本人原创:

那么什么时候用iqueryable,什么时候用ienumerable?

1.func<>谓词表达式,就是一个委托,委托一旦调用,就立即执行了,将执行结果保存在内存中。

2.expression是一个表达式,会存储拼接表达式树,直到在运行期最终执行。

那么在ef中我们根据条件查询数据时,不应该把数据一次性加载到本地内存中,然后再本地内存中进行筛选,如果数据量大了,就崩溃了。

我们需要将表达式组合好,然后再一起提交到数据库执行,返回查询结果。

(每次在执行where查询操作符的时候iqueryprovider会为我们创建一个新的iqueryable,调用asenumerable()方法的时候并不会去实际取值,只是

得到了一个ienumerable,所以ef在查询数据时候不要先取ienumerable再去筛选数据。执行tolist方法时才会去真正调用迭代器getenumerator()
取值。真正取值时候,会去执行iqueryprovider中的excute方法.(解析表达式,然后执行取得结果))

这就是iqueryable的延迟加载把.

.知识点总结

  (1) 解决查询多次的问题,因iqueryable延迟加载,当用到集合的时候,provider会解析表达式,然后生成查询,所以会走一个复杂的过程。

  (2) 本地集合:list,array,ienumable都是本地集合,都是缓存在里面的

  (3) 使用ef管理上下文实例的最佳选择是线程的唯一。

  (4) ienumerable接口是一个公开枚举器,该枚举器支持在指定的集合上进行简单迭代,也就是次接口可以直接使用foreach遍历次object。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网