如果在 AutoMapper ForMember 中

blu*_*nha 4 c# automapper

我正在尝试映射两个不同的对象

CreateMap<A, B>()
  .ForMember(x => x.Quantity, y => y.MapFrom(z =>z.QuantityList.First().TotalQuantity))
Run Code Online (Sandbox Code Playgroud)

我想另外分配x.Quantity = 1 if z =>z.QuantityList.First().TotalQuantity == 0上述映射。

这是如何完成的ForMember()

ist*_*pin 6

有几个选项。您可以将 if/else 包装在函数中,也可以使用if {}块,但在这种情况下,最简单的方法可能是使用内联三元运算符:

例如:

.ForMember(dest => dest.Quantity, opt => opt
    .MapFrom(src => (src.Quantitylist.First().TotalQuantity == 0) ? 1 
    : src.QuantityList.First().TotalQuantity))
Run Code Online (Sandbox Code Playgroud)


Chr*_*rdt 6

虽然您已经通过三元运算符得到了答案,但我认为还有一些重要的补充:

您始终可以{}在 lambda* 中使用代码块:

.MapFrom(src => {
    var quantity = src.Quantitylist.First().TotalQuantity;
    if (quantity == 0)
    {
        return 1;
    }
    return quantity;
})
Run Code Online (Sandbox Code Playgroud)

在这种情况下,三元运算符很好,但如果您需要更高级的东西,请记住还有另一种解决方案;)

*不包括像 Linq2Sql/EF 这样的异国 linq 提供程序