#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 條件查詢