猿问

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

在我的 ASP.NET MVC 项目中,我有一个 HttpGET 方法,我需要从数据库中获取车辆列表。很简单,直接获取数据,传递列表即可查看。但是我正在学习 udemy(asp.net MVC 5 完整版)的教程,其中作者使用 Automapper 自动将对象与其 Dtos 映射。在本教程中,它是 Automapper 4.1 版,但我使用的是 7.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 中的帮助文档,但找不到合适的示例,或者我不明白如何应用该材料来解决我的问题,请帮助。


元芳怎么了
浏览 239回答 2
2回答

饮歌长啸

假设_context.Vehicles.ToList()返回一个IList<Vehicle>,您可以执行以下操作:[HttpGet]public IEnumerable<VehicleDto> GetVehicles(){&nbsp; &nbsp; return Mapper.Map<IList<Vehicle>, List<VehicleDto>>(_context.Vehicles.ToList());}这还假设您已经使用以下内容配置了从Vehicle到的映射VehicleDto:cfg.CreateMap<Vehicle, VehicleDto>();或者,您可以使用 LINQ 的 select 运算符并执行以下操作来调用Map单个项目而不是整个集合:[HttpGet]public IEnumerable<VehicleDto> GetVehicles(){&nbsp; &nbsp; return _context.Vehicles.Select(v => Mapper.Map<Vehicle, VehicleDto>(v)).ToList();}更新: 切换Vehicle并VehicleDto反映 OP 在评论中显示的信息,表明他将数据存储Vehicle在数据库中,并且他的方法应返回VehicleDto.

犯罪嫌疑人X

您之前是否定义了映射器类?您在启动时加载类。App_Start 文件夹。创建一个名为 MapModelEntity.cs 的类&nbsp;public class MapModelEntity{&nbsp; &nbsp; public static void RegisterMapping()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Mapper.Initialize(config =>&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; config.CreateMap<StatusEntity, StatusTypeModel>().ReverseMap(); // For bothways&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; config.CreateMap<Vehicle, VehicleDto>() // For custom mapping&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .ForMember(dest => dest.Prop1,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;opts => opts.MapFrom(src => src.Prop1));&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }添加对 Global.asax 的引用protected void Application_Start(){&nbsp; &nbsp; &nbsp; &nbsp; GlobalConfiguration.Configure(WebApiConfig.Register);&nbsp; &nbsp; &nbsp; &nbsp; AreaRegistration.RegisterAllAreas();&nbsp; &nbsp; &nbsp; &nbsp; FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);&nbsp; &nbsp; &nbsp; &nbsp; RouteConfig.RegisterRoutes(RouteTable.Routes);&nbsp; &nbsp; &nbsp; &nbsp; BundleConfig.RegisterBundles(BundleTable.Bundles);&nbsp; &nbsp; &nbsp; &nbsp; **MapModelEntity.RegisterMapping();**}在控制器中var Result = _context.Vehicles.ToList();var Mapped = Mapper.Map<VehicleDto>(Result);
随时随地看视频慕课网APP
我要回答