Entity framework 如何在实体框架中仅从对象图中选择特定属性?
我有一个简单的数据模型Entity framework 如何在实体框架中仅从对象图中选择特定属性?,entity-framework,entity-framework-core,Entity Framework,Entity Framework Core,我有一个简单的数据模型 car - make - model - year - colour - engine - model - no. cylinders - size - etc - fuel tank - model - capacity - fuel type - etc - etc 所以我有“汽车”、“发动机”和“油箱”实体。每个都有许多属性 我想要所有100辆汽车的列表,但只想显示以下选
car
- make
- model
- year
- colour
- engine
- model
- no. cylinders
- size
- etc
- fuel tank
- model
- capacity
- fuel type
- etc
- etc
所以我有“汽车”、“发动机”和“油箱”实体。每个都有许多属性
我想要所有100辆汽车的列表,但只想显示以下选定属性:car.make、car.model、car.year、car.engine、car.size、car.fueltype
我当然可以使用.include
在对象图中恢复子实体,但这是一个巨大的成功,因为有许多属性
我的问题是,是否有一种简洁的方法可以做到这一点。或者以任何方式使用实体框架(理想情况下是EF7/Core)
[我确实提到了在匿名类中使用select的方法,但看不出如何在多个包含中工作]
谢谢。如果您想收回完整的实体,您只需要使用
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,这将变成:
// (at start of project)
Mapper.Initialize(c => {
c.CreateMap<Car, CarModel>();
});
// Projection...
var cars = context.Cars.ProjectTo<CarModel>().ToList();
//(项目开始时)
初始化映射器(c=>{
c、 CreateMap();
});
//投影。。。
var cars=context.cars.ProjectTo().ToList();
在本例中,EngineCC是从Engine.CC自动映射的,但您可以手动指定任何不自动工作的映射。AutoMapper将创建一个Linq投影,只带回您需要的属性。如果您想收回完整的实体,您只需要使用
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,这将变成:
// (at start of project)
Mapper.Initialize(c => {
c.CreateMap<Car, CarModel>();
});
// Projection...
var cars = context.Cars.ProjectTo<CarModel>().ToList();
//(项目开始时)
初始化映射器(c=>{
c、 CreateMap();
});
//投影。。。
var cars=context.cars.ProjectTo().ToList();
在本例中,EngineCC是从Engine.CC自动映射的,但您可以手动指定任何不自动工作的映射。AutoMapper将创建Linq投影,只带回您需要的属性。Richard-这正是我需要的-非常感谢!我一直被困在包裹里。当然我不需要它们!是的,使用AutoMapper映射到DTO是一种方式。Richard-这正是我需要的-非常感谢!我一直被困在包裹里。当然我不需要它们!是的,使用AutoMapper映射到DTO是一个不错的选择。