如何用自定义映射映射一对多关系

本文关键字:映射 一对多 关系 自定义 何用 | 更新日期: 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));