如何用自定义映射映射一对多关系
本文关键字:映射 一对多 关系 自定义 何用 | 更新日期: 2023-09-27 18:10:21
我正在学习如何使用AutoMapper
,我正在掌握它的窍门。但是如果是一对多关系呢?你可以这样做,对吧?
但是,如果场景是这样的,其中您只想要列表中的最后一个值。让我示范一下。
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错误。任何帮助都将非常感激。谢谢!
您的映射看起来不错,但也许您正在获得NullReferenceException
。我会这样映射:
Mapper.CreateMap<Item, ItemVM>()
.ForMember(dto => dto.Price, opt =>
opt.MapFrom(s => s.Prices.Any()?
s.Prices.OrderByDescending ().First ().Price:0));