僅載入所需資料

程式碼中經常出現的一個問題是載入所有資料。這將大大增加伺服器的負載。

假設我有一個名為 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;

與前面的示例相同,只會從資料庫中檢索欄位 LocationNameLocationArea匿名型別可以包含所需數量的值。