仅加载所需数据

代码中经常出现的一个问题是加载所有数据。这将大大增加服务器的负载。

假设我有一个名为 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匿名类型可以包含所需数量的值。