儘可能在記憶體中執行資料庫中的查詢
假設我們想要計算德克薩斯州有多少個縣:
var counties = dbContext.States.Single(s => s.Code == "tx").Counties.Count();
查詢是正確的,但效率低下。States.Single(…)
從資料庫載入一個狀態。接下來,Counties
在第二個查詢中載入所有 254 個縣及其所有欄位。然後在載入的 Counties
集合的記憶體中執行 .Count()
。
我們已經載入了許多我們不需要的資料,我們可以做得更好:
var counties = dbContext.Counties.Count(c => c.State.Code == "tx");
這裡我們只做一個查詢,在 SQL 中轉換為計數和連線。我們只返回資料庫中的計數 - 我們儲存了返回的行,欄位和物件的建立。
通過檢視集合型別很容易看出查詢的位置:IQueryable<T>
vs. IEnumerable<T>
。