是否可以将ICollection映射到单个实体BonusDto?
我在Customer类中使用ICollection来获取所有行,并从我计算的行中获得保留&我希望映射到BonusDto的部分Bonus类中的PreviouslyPaid字段。
public class BonusDto
{
public virtual long CustomerId { get; set; }
public virtual decimal Retained { get; set; }
public virtual decimal PreviouslyPaid { get; set; }
}
public class Customer
{
public virtual string Firstname { get; set; }
public virtual ICollection<Bonus> Bonuses { get; set; }
}
public class CustomerDto
{
public virtual string Firstname { get; set; }
public virtual BonusDto Bonus { get; set; }
}
public partial class Bonus
{
private decimal _previouslyPaid;
public decimal PreviouslyPaid
{
get
{
if (UsedDate.HasValue)
{
_previouslyPaid += Amount;
}
return _previouslyPaid;
}
}
private decimal _retained;
public decimal Retained
{
get
{
if (!UsedDate.HasValue && DueDate > DateTime.UtcNow)
{
_retained += Amount;
}
return _retained;
}
}
}
答案 0 :(得分:1)
您必须使用Bonuses
和Bonus
定义从ForMember
到ResolveUsing
的映射。
将您自己的映射逻辑从ICollection<Bonus>
传递到单个BonusDto
:
static BonusDto YourLogic(Customer customer)
{
return new BonusDto()
{
Retained = customer.Bonuses.Select(b => b.Retained).Sum()
};
}
static void Main(string[] args)
{
AutoMapper.Mapper.CreateMap<Customer, CustomerDto>()
.ForMember(dto => dto.Bonus, opt => opt.ResolveUsing(YourLogic));
var customerDto = AutoMapper.Mapper.Map<CustomerDto>(customer);
}