木南晴夏,麦饭石滤料,怏怏不乐怎么读
第一篇: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。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论