我在.NET上有點新鮮,我想知道linq是如何工作的,因爲你可以一個接一個地應用許多linq查詢,但是它們都不會真正執行,直到它們被用來傳輸信息或轉換爲列表等。
有兩種重要的方法可以通過使用IQueryable<T>
來獲得linq查詢,這些查詢直接在Sql上進行篩選,IEnumerable可以獲取所有記錄,然後在內存中與它們一起使用。然而,讓我們對這個代碼來看看:將IQueryable linq查詢轉換爲IEnumerable <T>取消了linq優化的工作方式?
//Linq dynamic library
IQueryable<Table> myResult = db.Categories
.Where(a => a.Name.Contains(StringName))
.OrderBy("Name")
.Skip(0)
.Take(10);
if (myResult != null)
{
return myResult.AsEnumerable();
}
else
{ return null; }
Depsite我使用LINQ的動態庫,從這個查詢的直接結果是在IQueryable<T>
GET,如果查詢終於被返回IEnumerable
,是查詢是真正過濾的SQL?或者它在內存中?
回答這個問題的最好方法是查看數據上下文的'Log'屬性並親自查看。試驗你的查詢的不同變化,看看它是如何影響*實際執行的。 – Servy 2013-02-12 21:33:43
對不起,我如何檢查日誌? – 2013-02-12 21:34:52
那麼,這可能是一個很好的問題,谷歌或該屬性的MSDN文檔;如果內存服務,那裏就有一個很好的例子。 – Servy 2013-02-12 21:35:54