如果在AutoMapper ForMember中也是如此

时间:2017-08-01 17:37:20

标签: c# automapper

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

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()完成?

3 个答案:

答案 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);