为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
元芳怎么了 2021-11-14 15:47:59
在我的 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 中的帮助文档,但找不到合适的示例,或者我不明白如何应用该材料来解决我的问题,请帮助。
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

假设_context.Vehicles.ToList()返回一个IList<Vehicle>,您可以执行以下操作:


[HttpGet]

public IEnumerable<VehicleDto> GetVehicles()

{

    return Mapper.Map<IList<Vehicle>, List<VehicleDto>>(_context.Vehicles.ToList());

}

这还假设您已经使用以下内容配置了从Vehicle到的映射VehicleDto:


cfg.CreateMap<Vehicle, VehicleDto>();

或者,您可以使用 LINQ 的 select 运算符并执行以下操作来调用Map单个项目而不是整个集合:


[HttpGet]

public IEnumerable<VehicleDto> GetVehicles()

{

    return _context.Vehicles.Select(v => Mapper.Map<Vehicle, VehicleDto>(v)).ToList();

}

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


查看完整回答
反对 回复 2021-11-14
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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


您在启动时加载类。


App_Start 文件夹。创建一个名为 MapModelEntity.cs 的类 

public class MapModelEntity

{

    public static void RegisterMapping()

    {

        Mapper.Initialize(config =>

        {

          config.CreateMap<StatusEntity, StatusTypeModel>().ReverseMap(); // For bothways

          config.CreateMap<Vehicle, VehicleDto>() // For custom mapping

                .ForMember(dest => dest.Prop1,

                           opts => opts.MapFrom(src => src.Prop1)); 

        }

添加对 Global.asax 的引用


protected void Application_Start()

{

        GlobalConfiguration.Configure(WebApiConfig.Register);

        AreaRegistration.RegisterAllAreas();

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

        RouteConfig.RegisterRoutes(RouteTable.Routes);

        BundleConfig.RegisterBundles(BundleTable.Bundles);

        **MapModelEntity.RegisterMapping();**

}


在控制器中


var Result = _context.Vehicles.ToList();

var Mapped = Mapper.Map<VehicleDto>(Result);


查看完整回答
反对 回复 2021-11-14
  • 2 回答
  • 0 关注
  • 238 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信