Asp.net core 使用AutoMapper展平多对多关系

Asp.net core 使用AutoMapper展平多对多关系,asp.net-core,entity-framework-core,automapper-9,Asp.net Core,Entity Framework Core,Automapper 9,我使用的是EF Core,两个表之间存在多对多关系 public class Sale { public int Id { get; set; } public DateTime Date { get; set; } public double Total { get; set; } public List<SalePaymentMethod> SalePaymentMethods { get; set; }

我使用的是EF Core,两个表之间存在多对多关系

 public class Sale
    {
        public int Id { get; set; }
        public DateTime Date { get; set; }
        public double Total { get; set; }
        public List<SalePaymentMethod> SalePaymentMethods { get; set; }
    }
关系的另一个表:

public class PaymentMethod
{
    public int Id { get; set; }
    public string PaymentName { get; set; }
    public bool PaymentType { get; set; }
    public List<SalePaymentMethod> SalePaymentMethods { get; set; }

}

我的问题可能是我想在主映射中做另一个映射。

我找到了解决方法

创建一个配置文件,以将
SalePaymentMethod
从映射到
PaymentMethodDto

    public class PaymentMethodProfile : Profile
{
    public PaymentMethodProfile()
    {
        CreateMap<SalePaymentMethod, PaymentMethodDto>()
             .ForMember(q => q.Amount, opt => opt.MapFrom(s => s.Amount))
             .ForMember(q => q.DefferedPaymentCount, opt => opt.MapFrom(s => s.DefferedPaymentCount))
             .ForMember(q => q.PaymentName, opt => opt.MapFrom(s => s.PaymentMethod.PaymentName))
             .ForMember(q => q.PaymentType, opt => opt.MapFrom(s => s.PaymentMethod.PaymentType));


    }
}
}

然后像这样使用它:

 _mapper.ProjectTo<SaleUserBranchProductsDTO>(_context.Sales.Where(wh => wh.UserId == UserId)).ToList();
\u mapper.ProjectTo(_context.Sales.Where(wh=>wh.UserId==UserId)).ToList();

是的,这是可能的。“你试过什么了吗?”我浪费了一整天的时间来想办法解决它。发布这个问题几分钟后,我设法解决了它。谢谢:)
public class PaymentMethodDto
{
    public string PaymentName { get; set; }
    public bool PaymentType { get; set; }
    public int DefferedPaymentCount { get; set; }
    public double Amount { get; set; }
}
    public class PaymentMethodProfile : Profile
{
    public PaymentMethodProfile()
    {
        CreateMap<SalePaymentMethod, PaymentMethodDto>()
             .ForMember(q => q.Amount, opt => opt.MapFrom(s => s.Amount))
             .ForMember(q => q.DefferedPaymentCount, opt => opt.MapFrom(s => s.DefferedPaymentCount))
             .ForMember(q => q.PaymentName, opt => opt.MapFrom(s => s.PaymentMethod.PaymentName))
             .ForMember(q => q.PaymentType, opt => opt.MapFrom(s => s.PaymentMethod.PaymentType));


    }
}
public SaleUserBranchProductsProfile()
{
    CreateMap<Sale, SaleUserBranchProductsDTO>()
        .ForMember(q => q.Id, opt => opt.MapFrom(s => s.Id))
        .ForMember(q => q.Date, opt => opt.MapFrom(s => s.Date))
        .ForMember(q => q.Total, opt => opt.MapFrom(s => s.Total))
        //Here is the magic
        .ForMember(q=> q.PaymentMethoddtos, opt => opt.MapFrom(s => s.SalePaymentMethods));
}
 _mapper.ProjectTo<SaleUserBranchProductsDTO>(_context.Sales.Where(wh => wh.UserId == UserId)).ToList();