儘可能在記憶體中執行資料庫中的查詢

假設我們想要計算德克薩斯州有多少個縣:

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>