我正在尝试映射两个不同的对象
CreateMap<A, B>()
.ForMember(x => x.Quantity, y => y.MapFrom(z =>z.QuantityList.First().TotalQuantity))
如果 z.QuantityList.First().TotalQuantity == 0,则将 x.Quantity = 1 赋值给 x,否则使用上述映射方法。
ForMember()
中如何实现此操作?
我正在尝试映射两个不同的对象
CreateMap<A, B>()
.ForMember(x => x.Quantity, y => y.MapFrom(z =>z.QuantityList.First().TotalQuantity))
如果 z.QuantityList.First().TotalQuantity == 0,则将 x.Quantity = 1 赋值给 x,否则使用上述映射方法。
ForMember()
中如何实现此操作?
虽然您已经通过三元运算符得到了答案,但我认为还有一些重要的内容需要添加:
您始终可以在您的lambda中使用代码块{}
:
.MapFrom(src => {
var quantity = src.Quantitylist.First().TotalQuantity;
if (quantity == 0)
{
return 1;
}
return quantity;
})
有几种选择。你可以将if/else包装在一个函数中,也可以使用if {}
代码块,但在这种情况下,最简单的方法可能是使用内联三元运算符:
例如:
.ForMember(dest => dest.Quantity, opt => opt
.MapFrom(src => (src.Quantitylist.First().TotalQuantity == 0) ? 1
: src.QuantityList.First().TotalQuantity))
class A
{
public List<int> QuantityList { get; set; } = new List<int>();
}
class B
{
public int Quantity { get; set; }
}
var a = new A();
a.QuantityList.Add(5);
Mapper.Initialize(c => c.CreateMap<A, B>().ForMember(x => x.Quantity, y => y.MapFrom(z => z.QuantityList.First() == 0 ? 1 : z.QuantityList.First())));
var b = Mapper.Map<A, B>(a);