1

使用 AutoMapper v6.1

无需硬编码该值来代替枚举 ( (int)POStatusOptions.Ordered),您如何使用 Projection 完成此映射:

CreateMap<WorkOrderDetail, WorkOrderDetailsListViewModel>(MemberList.Destination)
.ForMember(vm => vm.QtyOnPOs, opt => opt.MapFrom(entity =>
    entity.Item.PODetails
        .Where(pod => pod.POHeader.StatusId >= (int)POStatusOptions.Ordered)
        .Sum(pod => pod.QtyOrdered)
        )))

我对 automapper 的配置是使用配置文件。所以我有

我的配置类:

public static class AutoMapperConfiguration
{
    public static void Configure()
    {
        //see https://github.com/AutoMapper/AutoMapper/wiki/Configuration
        //see https://github.com/AutoMapper/AutoMapper/wiki/Configuration-validation 
        Mapper.Initialize(am =>
        {
            am.AddProfile<AutoMapperViewModelProfile>();
            am.AddProfile<AutoMapperViewModelProfileAdmin>();
        });

        //uncomment this during testing to get a list of all errors in the browser when you run any page in otis
        Mapper.AssertConfigurationIsValid();
    }    
}

这被称为Application_Start()AutoMapperConfiguration.Configure();

我的个人资料类:

public class AutoMapperViewModelProfile : Profile
{
    public AutoMapperViewModelProfile()
    {
        CreateMap<WorkOrderDetail, WorkOrderDetailsListViewModel>(MemberList.Destination)
        .ForMember(vm => vm.QtyOnPOs, opt => opt.MapFrom(entity =>
            entity.Item.PODetails
            .Where(pod => pod.POHeader.StatusId >= (int)POStatusOptions.Ordered)
            .Sum(pod => pod.QtyOrdered)
        )))
}
4

1 回答 1

1

在 AutoMapper 中,它被称为Parameterization。请参阅AutoMapper 文档

在您的情况下,它将是:

POStatusOption poStatusOption = POStatusOption.Whatever;
CreateMap<WorkOrderDetail, WorkOrderDetailsListViewModel>(MemberList.Destination)
   .ForMember(
      vm => vm.QtyOnPOs, 
      opt => opt.MapFrom(entity =>
         entity.Item.PODetails
            .Where(pod => pod.POHeader.StatusId >= (int)poStatusOption)
            .Sum(pod => pod.QtyOrdered)
      )
   )

你需要像这样使用它:

dbContext.WorkOrderDetails.ProjectTo<WorkOrderDetailsListViewModel>(Config, new { poStatusOption = POStatusOptions.Ordered });
于 2017-12-15T07:08:20.843 回答