自动将create.map()添加到集合属性

本文关键字:添加 集合 属性 create map | 更新日期: 2023-09-27 18:10:39

如何映射到一个属性集合,但只对集合的最后一条记录感兴趣。

比如说。

public class ItemDTO <-- destination class
{
  public string Name { get; set; }
  public decimal PricesPrice { get; set; }
}
public class Item <-- Source class
{
  public int Id { get; set; }
  public string Name { get; set; }
  public virtual ICollection<Price> Prices { get; set; }
}
public class Price <-- Source class
{
  public int Id { get; set; }
  public int ItemId { get; set; }
  public decimal Price { get; set; }
  public virtual Item Item { get; set; }
}

然后我试过这样做,但似乎不正确。

Mapper.CreateMap<Item, ItemDTO>()
                .ForMember(dto => dto.PricesPrice, opt => opt.MapFrom(s => s.Prices.LastOrDefault().Price));

编辑:然后在那之后,我做了一个投影,因为如果我使用Mapper.Map(),它将返回整个结果集,这不是我想要的,我只想要我需要的值。所以我这样做了:

Project().To<ItemDTO>()

嗯,基本上,我想要这样的东西:

from item in SomeDbContext.Items
where item.ItemId == 1
select new ItemDTO
{
  Name = item.Name,
  PricesPrice = item.Prices.LastOrDefault()
}

以上代码可以用AutoMapper来完成吗?

自动将create.map()添加到集合属性

我想我明白你现在想做什么了。

试试这个

from item in SomeDbContext.Items
where item.ItemId == 1
select Mapper.Map<ItemDTO>(item)

或者你可以使用LINQ

SomeDbContext.Items.Where(i=> i.ItemId == 1).Select(Mapper.Map<ItemDTO>)

这两种方法都将返回ItemDTO对象列表,其中ItemId为1