具有不同类型嵌套对象的自动映射器

时间:2016-06-14 09:40:48

标签: automapper

我有一个目标类,如下所示

public class Order
{
    public string OrderId { get; set; }
    public List<Delivery> Deliveries { get; set;}
}

public class Delivery
{
    public string ProductName { get; set; }
}

我要从下面的源类

中映射上面类中的ProductName
public class OrderDTO
{
    public string OrderId { get; set; }
    public List<OrderDelivery> Deliveries { get; set; }
}
public class OrderDelivery
{
    public List<OrderDeliveryDetails> ProductDeliveryDetails { get; set; }
}
public class OrderDeliveryDetails
{
    public string ProductName { get; set; }
}

如何使用Automapper执行此操作 (注意:请不要与List<OrderDeliveryDetails>课程中的OrderDelivery混淆。这是因为,它也可能包含子产品,但我只需要接受父ProductName

1 个答案:

答案 0 :(得分:0)

好吧,如果通过采用父ProductName你的意思是第一个,你可以尝试这些方面的东西(否则我可能会误解你的问题,你可以忽略我的答案):

public class AutoMapperConfiguration : Profile
{
    private readonly IConfiguration _mapper;

    public AutoMapperConfiguration(IConfiguration mapper)
    {
        _mapper = mapper;
    }

    protected override void Configure()
    {
        _mapper.CreateMap<OrderDTO, Order>
           .ForMember(d => d.OrderId, o => o.MapFrom(s => s.OrderId))
           .ForMember(d => d.Deliveries, o => o.MapFrom(s => s.Deliveries));

        _mapper.CreateMap<OrderDelivery, Delivery>
           .ForMember(d => d.ProductName, o => o.MapFrom(s => s.ProductDeliveryDetails.First().ProductName));
    }
}

然后简单

_mapper.Map(orderDto);

(如果您拥有使用AutoMapper所需的所有连线,请执行此操作)。