【问题标题】:how to map slightly complicated scenario then from -> to member scenario如何将稍微复杂的场景从 -> 映射到成员场景
【发布时间】:2019-10-23 06:40:57
【问题描述】:

我有一个CarDtoCar 域对象。 汽车有司机名单。

public class Car
{
    public int Id {get; set; }
    public int Name {get; set; }
    public ICollection<Driver> Drivers {get; set; }
}


public class CarVM
{
    public int Id {get; set; }
    public int Name {get; set; }
    public string DriverBadge {get; set; }
    public string[] Drivers {get; set; }
}

我正在尝试使用 AutoMapper 映射这些对象

 CreateMap<CarVM, Car>()
      .ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.Name))
      .ForMember(dest => dest.Drivers, opts => {
      ... how to map here?
})

【问题讨论】:

  • 您需要一张从Driverstring 的地图。
  • 问题不是如何从数组中获取值并创建一个列表,而是如何在这种情况下,在 AutoMapper 的 ForMember 中做到这一点
  • 不需要ForMembers。也许在这里研究一下该地图将如何提供帮助。
  • 我想将控制器中的逻辑移动到这个 AutoMapper 类中。我如何将值从数组映射到驱动程序列表的逻辑。

标签: c# .net .net-core automapper


【解决方案1】:

您所要做的就是从string[] 映射到List&lt;&gt;。只需使用以下

 CreateMap<CarVM, Car>()
      .ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.Name))
      .ForMember(dest => dest.Drivers, opts => opts.MapFrom(s=> s.Drivers.ToList()))
});

更多信息 - Automapper Lists & Arrays

【讨论】:

  • 感谢您的更新。如果我想在同一个块内手动向列表中添加一个驱动程序怎么办(我有一个场景,我想根据它的徽章再添加一个驱动程序)。
  • @user1765862 映射应该只用于srcdest 的映射。它与您的业务逻辑无关
  • 不需要ForMember。评论他们,你会得到相同的结果。
  • @user1765862 上帝就在这里,是的,如果srcdest 具有相同的名称和类型,则不需要ForMember
  • 它们不必是同一类型。他们只需要'可映射':)
猜你喜欢
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 2021-10-20
相关资源
最近更新 更多