C# 自动映射到单个实体的ICollection

C# 自动映射到单个实体的ICollection,c#,automapper,C#,Automapper,是否可以将ICollection映射到单个实体 我在Customer类中使用ICollection获取所有行,并从这些行中计算要映射到BonusTo的部分红利类中的保留字段和以前支付的字段 public class BonusDto { public virtual long CustomerId { get; set; } public virtual decimal Retained { get; set; } public vir

是否可以将ICollection映射到单个实体

我在Customer类中使用ICollection获取所有行,并从这些行中计算要映射到BonusTo的部分红利类中的保留字段和以前支付的字段

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;
            }
        }
    }
public class-BonusDto
{
公共虚拟长客户ID{get;set;}
公共虚拟十进制保留{get;set;}
以前支付的公共虚拟十进制数{get;set;}
}
公共类客户
{
公共虚拟字符串Firstname{get;set;}
公共虚拟ICollection奖金{get;set;}
}
公共类CustomerDto
{
公共虚拟字符串Firstname{get;set;}
公共虚拟奖金{get;set;}
}
公共部分班级奖金
{
以前支付的私人小数;
先前支付的公共收入
{
得到
{
if(UsedDate.HasValue)
{
_先前支付的+=金额;
}
返还(先前支付的);;
}
}
保留专用小数;
保留公共小数
{
得到
{
如果(!UsedDate.HasValue&&DueDate>DateTime.UtcNow)
{
_留存+=金额;
}
退货(保留);;
}
}
}

您必须使用
FormMember
ResolveUsing
定义从
奖金
奖金
的映射。 将您自己的映射逻辑从
ICollection
传递到单个
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);
    }
静态连接到您的逻辑(客户)
{
将新的BonusDto()返回
{ 
Retained=customer.bonus.Select(b=>b.Retained).Sum()
};
}
静态void Main(字符串[]参数)
{
AutoMapper.Mapper.CreateMap()
.ForMember(dto=>dto.Bonus,opt=>opt.resolvesusing(YourLogic));
var customerDto=AutoMapper.Mapper.Map(客户);
}

您希望如何将集合中每个
奖金的值聚合为一个
BonusDto
?我们需要更多关于您希望如何处理信息的详细信息我希望将保留的和以前支付的值从ICollection映射到一个BonusDto类,应忽略所有其他实体。您还需要什么吗?您应该提供一个示例函数
BonusDTO-ToDTO(ICollection)
,该函数显示您的逻辑。@hansmaad,但我想使用automapper?对不起,我不知道我是否慢:)