我開始在LINQ引擎下查看一些內容,並且我無法理解一些LINQ擴展方法重載。將Func <>傳遞給IQueryable與表達式<Func<>>
例如,假設我正在使用.Where()查詢DbContext。我總是通過標準Func <>,而不是所述Func <>的表達式<>。下面的示例查詢:
var db = new MyContext();
var foo = db.products.Where(p => p.Category == "books");
這裏就是我很困惑。當我查看可用的方法簽名時,我會假設上面使用的重載將返回給我一個IEnumerable ...但它實際上返回一個IQueryable。如果IQueryable超載期望表達式而不僅僅是一個Func,這怎麼可能?感覺像編譯器以某種方式幫助我(在這種情況下)爲我構建表達式,但是我找不到解釋這種情況的資源。謝謝!
如果您正在使用實體框架,然後在查詢中使用函數求<>可不好。我們遇到了在lamda中使用Func <>查詢數據庫的情況。結果是EF將整個表返回給客戶端,然後在客戶端使用Func <>進行過濾。在使用實體框架時,您一定要使用表達式>。 –