我有一个简单的数据模型
car
- make
- model
- year
- colour
- engine
- model
- no. cylinders
- size
- etc
- fuel tank
- model
- capacity
- fuel type
- etc
- etc
所以我有' car'引擎'和“'油箱'实体。每个都有很多属性。
我想要列出所有100辆汽车,但只想显示以下所选属性:car.make, car.model, car.year, car.engine, car.size, car.fueltype
。
我当然可以使用.include
来恢复对象图中的子实体,但由于有很多属性,这是一个很大的打击。
我的问题是,是否有一个简洁的方法来做到这一点。或者实际上使用Entity Framework(理想情况下是EF7 / Core)?
[我确实引用了https://colinmackay.scot/2011/07/31/getting-just-the-columns-you-want-from-entity-framework/,它将select用于匿名类,但无法看到它在多个包含中如何工作]
谢谢你。
答案 0 :(得分:4)
如果您想要取回整个实体,则只需使用Include
- 您不需要这些实体进行投影。您可以匿名进行投影,也可以使用已定义的模型类进行投影。以下代码可以帮助您入门:
// Define model...
public class CarModel
{
public string Make { get; set; }
public string Model { get; set; }
public int EngineCC { get; set; }
}
// Project to list of models
var cars = context.Cars.Select(c => new CarModel
{
Make = c.Make,
Model = c.Model,
EngineCC = c.Engine.CC
}).ToList();
通过使用AutoMapper等映射库,您可以更加简单。使用AutoMapper,它变为:
// (at start of project)
Mapper.Initialize(c => {
c.CreateMap<Car, CarModel>();
});
// Projection...
var cars = context.Cars.ProjectTo<CarModel>().ToList();
在此示例中,EngineCC是从Engine.CC自动映射的,但您可以手动指定任何不能自动工作的映射。 AutoMapper将创建一个Linq投影,只返回您需要的属性。