2017-08-01 80 views
1

我試圖映射兩個不同的對象如果別人在AutoMapper ForMember

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 othwerwise上述映射。

這是怎麼做到ForMember()

回答

2

這是 - 你可以使用內聯三元運算符。

EG:

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

謝謝:)。我希望它有很好的文檔。 –

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); 
1

當你有已經與三元運算符你的答案,我認爲是添加一些重要的東西:

您可以隨時在你的拉姆達*使用一個代碼塊{}

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

在這種情況下三元運算符是好的,但如果您需要更高級的東西,請記住有另一種解決方案;)

*排除異國LINQ提供像LINQ2SQL/EF