如何映射到属性集合,但只对集合的最后一条记录感兴趣。
说,像。
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
完成吗?
答案 0 :(得分:1)
我想我明白你现在要做的是什么。
试试这个
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