前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(转载)IQueryable和IEnumerable

(转载)IQueryable和IEnumerable

作者头像
CherishTheYouth
发布2019-09-11 14:40:47
5230
发布2019-09-11 14:40:47
举报
文章被收录于专栏:Vue技术实践

转载声明:

第一篇:https://cloud.tencent.com/developer/article/1503526

第二篇:https://cloud.tencent.com/developer/article/1503523

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

第四篇:http://www.igiven.com/?p=2804 (这篇最好,阐释最详尽,最透彻)

下面内容摘自上面第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。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档