我正在寫一些代碼,它需要LINQ to SQL IQueryable<T>
並添加了進一步動態生成的Where子句。例如,下面是其中一種方法的骨架:可以意外評估LINQ to SQL IQueryable嗎?
IQueryable<T> ApplyContains(IQueryable<T> source, string field, string value)
{
Expression<Func<T, bool>> lambda;
... dynamically generate lambda for p => p.<field>.Contains(value) ...
return source.Where(lambda);
}
我可能鏈幾種這些方法一起玩完帶有跳躍/送頁。
我正確地認爲,當最終評估IQueryable
如果lambda表達式中有任何不能轉換爲SQL的異常將被拋出?特別是我擔心我可能會不小心做些事情,導致IQueryable
提前評估,然後繼續評估內存(從而拉動成千上萬的記錄)。
從一些事情,我讀過,我懷疑IQueryable
不會早這樣評價。任何人都可以確認這個嗎?
感謝您的提示。我確保將IQueryables保留在業務層中。作爲一個規則,我的實體框架上下文對象只有一個對業務層調用的生命週期 - 所以無論如何IQueryable無法評估超過該層。 – 2011-02-06 20:24:01