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