仅加载所需数据
代码中经常出现的一个问题是加载所有数据。这将大大增加服务器的负载。
假设我有一个名为 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
,匿名类型可以包含所需数量的值。