我正在学习如何使用AutoMapper
,我正在掌握它。但是,如果你有一对多的关系怎么办?您可以执行类似this的操作,对吧?
但是,如果场景是这样的,你只想要列表中的最后一个值。让我来证明一下。
public class Item
{
public Item()
{
Prices = new HashSet<Price>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Price> Prices { get; set; }
}
public class Price
{
public int Id { get; set; }
public int ItemId { get; set; }
public decimal Price { get; set; }
public virtual Item Item { get; set; }
}
public class ItemVM
{
public string Name { get; set; }
public decimal Price { get; set; }
}
现在,问题是我要映射ItemVM.Price
= The last value in Price class
。这可能吗?
我尝试过这样的事情,但没有奏效。
Mapper.CreateMap<Item, ItemVM>()
.ForMember(dto => dto.Price, opt => opt.MapFrom(s => s.Prices.LastOrDefault().Price));
然后
var items = All.Project().To<ItemVM>();
但是给我一个InvalidOperation的错误。任何帮助将非常感激。谢谢!
答案 0 :(得分:3)
您的地图看起来很不错,但也许您正在获得NullReferenceException
。我会这样映射:
[被修改]
Mapper.CreateMap<Item, ItemVM>()
.ForMember(dto => dto.Price, opt =>
opt.MapFrom(s => s.Prices.Any()?
s.Prices.OrderByDescending ().First ().Price:0));