EF的DbSet属性的Where查询,注意事项


#1 Func<T,bool>与 Expression<Func<T,bool>>的区别

Func<T,bool>本身就是一个委托(delegate),而Expression<Func<T,bool>>确实一个表达式,只有在编译之后才会变成委托,那么在EF中到底使用哪一个呢?又是为什么呢?其实如果我们写成Func<T,bool>类型的便来那个如果作为参数传递给where方法进行Linq查询时,Entity FrameWork将会产生全表查询,将整个数据库表忠的数据加载到内存中,然后再内存中根据where中的条件进一步查询,而Expression<Func<t,bool>>只是查询出来你where条件中的数据,不用去进行全表查询

#2  iqueryable与ienumerable的区别

EF的DbSet属性的Where方法默认是Expression<Func>,如果返回值是IEnumerable,不会引起全表查询的。

IQueryable本身即是一个内存操作,与数据库的关系取决于与数据库的第一次操作,之后再做任何查询就与数据库无关了。即db.Set<User>().where()中db.entry(User)会查询所有user到内存,然后再在内存中按where 条件查询


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM