AutoMapper中ForMember的If else用法

4

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

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() 中如何实现此操作?

3个回答

6

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

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

.MapFrom(src => {
    var quantity = src.Quantitylist.First().TotalQuantity;
    if (quantity == 0)
    {
        return 1;
    }
    return quantity;
})

在这种情况下,三目运算符是可以的,但如果你需要更高级的东西,记住还有另一种解决方案 ;)。 *不包括像Linq2Sql/EF这样的异类linq提供者

6

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

例如:

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

1
这里有一个简单的例子来展示它如何工作。我使用了一个简单的类结构。想象一下,你的类结构可能更加详细。同时,我使用了最新版本的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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接