僅載入所需資料
程式碼中經常出現的一個問題是載入所有資料。這將大大增加伺服器的負載。
假設我有一個名為 location
的模型,其中包含 10 個欄位,但並非所有欄位都是同時需要的。假設我只想要該模型的’LocationName’引數。
不好的例子
var location = dbContext.Location.AsNoTracking()
.Where(l => l.Location.ID == location_ID)
.SingleOrDefault();
return location.Name;
好例子
var location = dbContext.Location
.Where(l => l.Location.ID == location_ID)
.Select(l => l.LocationName);
.SingleOrDefault();
return location;
好示例中的程式碼只會獲取 LocationName
而不會獲取其他內容。
請注意,由於此示例中未實現實體,因此不需要 AsNoTracking()
。無論如何都沒有什麼可追蹤的。
使用匿名型別獲取更多欄位
var location = dbContext.Location
.Where(l => l.Location.ID == location_ID)
.Select(l => new { Name = l.LocationName, Area = l.LocationArea })
.SingleOrDefault();
return location.Name + " has an area of " + location.Area;
與前面的示例相同,只會從資料庫中檢索欄位 LocationName
和 LocationArea
,匿名型別可以包含所需數量的值。