我正在尝试映射两个不同的对象
CreateMap<A, B>()
.ForMember(x => x.Quantity, y => y.MapFrom(z =>z.QuantityList.First().TotalQuantity))
我想指定x.Quantity = 1 if z =>z.QuantityList.First().TotalQuantity == 0
以上的映射。
如何在ForMember()
完成?
答案 0 :(得分:2)
它是 - 您可以使用内联三元运算符。
E.G:
.ForMember(dest => dest.Quantity, opt => opt
.MapFrom(src => (src.Quantitylist.First().TotalQuantity == 0) ? 1
: src.QuantityList.First().TotalQuantity))
答案 1 :(得分:1)
虽然您已经使用三元运算符得到了答案,但我认为有一些重要内容需要补充:
您始终可以在lambda *中使用代码块{}
:
.MapFrom(src => {
var quantity = src.Quantitylist.First().TotalQuantity;
if (quantity == 0)
{
return 1;
}
return quantity;
})
在这种情况下,三元运算符很好,但是如果你需要更高级的东西,请记住还有另一种解决方案;)
*不包括像Linq2Sql / EF
这样的异域linq提供者答案 2 :(得分:0)
这是一个简单的例子,向您展示它是如何工作的。我使用了一个简单的类结构。想想,你的更多细节。我还使用了最新版本的AutoMapper。
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);