C# 如何使用Linq的Select方法并将每个实体传递给automapper

C# 如何使用Linq的Select方法并将每个实体传递给automapper,c#,asp.net-mvc,automapper,C#,Asp.net Mvc,Automapper,在我的ASP.NET MVC项目中,我有一个HttpGET方法,需要从DB中获取车辆列表。这很简单,只需获取数据并将列表传递给视图即可。但我遵循的是我的asp.NETMVC5Complete中的一个教程,作者使用Automapper自动将对象映射到DTO。在本教程中,它是AutomapperVersion4.1,但我使用的是Version7.x。因此,在我的get方法中,我无法理解如何编写Linq查询来获取所有车辆,并将每个车辆映射到其dto并作为列表发送 [HttpGet] public IE

在我的ASP.NET MVC项目中,我有一个HttpGET方法,需要从DB中获取车辆列表。这很简单,只需获取数据并将列表传递给视图即可。但我遵循的是我的asp.NETMVC5Complete中的一个教程,作者使用Automapper自动将对象映射到DTO。在本教程中,它是AutomapperVersion4.1,但我使用的是Version7.x。因此,在我的get方法中,我无法理解如何编写Linq查询来获取所有车辆,并将每个车辆映射到其dto并作为列表发送

[HttpGet]
public IEnumerable<VehicleDto> GetVehicles()
{
     return _context.Vehicles.ToList().Select(Mapper.Map<Vehicle,VehicleDto>(**How can I send each object here**));
     //return _context.Vehicles.ToList();
}
我已经阅读了Automapper中的帮助文档,但找不到合适的示例,或者说我不知道如何应用这些材料来解决我的问题。请帮助。

假设_context.Vehicles.ToList返回IList,您可以执行以下操作:

[HttpGet]
public IEnumerable<VehicleDto> GetVehicles()
{
    return Mapper.Map<IList<Vehicle>, List<VehicleDto>>(_context.Vehicles.ToList());
}
cfg.CreateMap<Vehicle, VehicleDto>();
或者,您可以使用LINQ的select操作符,并执行以下操作来调用单个项上的映射,而不是整个集合上的映射:

[HttpGet]
public IEnumerable<VehicleDto> GetVehicles()
{
    return _context.Vehicles.Select(v => Mapper.Map<Vehicle, VehicleDto>(v)).ToList();
}

更新:切换了Vehicle和VehicleDto,以反映OP在评论中显示的信息,表明OP将数据存储为数据库中的Vehicle,并且他的方法应返回VehicleDto列表。

您之前是否定义了映射器类

在启动时加载该类

应用程序启动文件夹。创建名为MapModelEntity.cs的类 公共类MapModelEntity { 公共静态无效注册表映射 { Mapper.Initializeconfig=> { config.CreateMap.ReverseMap;//用于双向 config.CreateMap//用于自定义映射 .ForMemberdest=>dest.Prop1, opts=>opts.MapFromsrc=>src.Prop1; } 添加对Global.asax的引用

受保护的无效应用程序\u启动 { GlobalConfiguration.ConfigureWebApiConfig.Register; AreaRegistration.RegisterAllAreas; FilterConfig.RegisterGlobalFilters GlobalFilters.Filters; RouteConfig.RegisterRoutesRouteTable.Routes; BundleConfig.RegisterBundlesBundleTable.Bundles; **MapModelEntity.RegisterMapping** }

内部控制器

var结果=_context.Vehicles.ToList; var Mapped=Mapper.mapreult


默认情况下会处理收集,无需选择。是否要返回车辆或VehicleDto的收集?@RuiJarimba我想从DB填充的车辆模型中填充Dto。@LucianBargaoanu是的,但我如何知道我使用Dto将数据传递到视图?Mapper.Map_context.vehicles可能是VehicleDto和VehicleTole需要到处交换位置,如果DbContext返回VehicleDto对象就没有多大意义了,除非最后一个示例中OP使用了实体classI'd use ProjectTo的名称VehicleDto。EF会抱怨EF查询中不支持Mapper.Map,但主要是因为ProjectTo是为这个.Y创建的es我已经为源到dto和dto到源创建了映射。在这里,我从底层DB获得的值与Vehicle类完全匹配,而VehicleDto是从方法返回的,用于隔离客户端和底层模型。您好,感谢您介绍的方式,我已经创建了映射,但因为我遵循的是old教程你的代码现在对我真的很有帮助…非常感谢,我也不能投票,因为我没有那么多的声誉。