C# AutoMapper如何实现带嵌套映射的列表对象转换
该需求完全可实现,你当前的配置缺失嵌套属性的数据源映射规则,补充对应配置即可正常生成带嵌套对象的结果,可按你的实际业务场景选择对应方案:
场景1:嵌套对象数据源已包含在OrganisationMain实体属性中
如果OrganisationMain类中已经存在TaskMain、NoteMain类型的关联属性,仅属性名和目标类的ReportTask/ReportNotes不匹配,补充映射规则即可:
var config = new MapperConfiguration(c => { c.CreateMap<OrganisationMain,CompanyActivityReport>() // 指定ReportTask映射自源实体的Task属性(替换为你实际的属性名) .ForMember(dest => dest.ReportTask, opt => opt.MapFrom(src => src.Task)) // 指定ReportNotes映射自源实体的Note属性(替换为你实际的属性名) .ForMember(dest => dest.ReportNotes, opt => opt.MapFrom(src => src.Note)); c.CreateMap<TaskMain, CompanyActivityReportTask>(); c.CreateMap<NoteMain, CompanyActivityReportNote>(); }); // 配置完成后可调用该方法校验配置合法性,避免字段遗漏映射 config.AssertConfigurationIsValid(); var mapper = new Mapper(config); List<CompanyActivityReport> TestList = mapper.Map<List<CompanyActivityReport>>(OrganisationMainsList).ToList();
如果OrganisationMain中的关联属性名和目标类的ReportTask/ReportNotes完全一致,AutoMapper会自动完成嵌套映射,无需额外配置。
场景2:嵌套对象数据源为独立集合,需按关联ID匹配
如果任务、备注数据是独立的集合,需要和机构数据按关联ID匹配映射,可通过ConstructUsing结合映射上下文实现:
// 假设你有独立的任务、备注集合 List<TaskMain> taskList = GetTaskList(); List<NoteMain> noteList = GetNoteList(); var config = new MapperConfiguration(c => { c.CreateMap<OrganisationMain, CompanyActivityReport>() .ConstructUsing((src, ctx) => new CompanyActivityReport { OrganisationID = src.OrganisationID, OrganisationName = src.OrganisationName, OrganisationSubTypeID = src.OrganisationSubTypeID, // 按机构ID匹配对应的任务并映射 ReportTask = ctx.Mapper.Map<CompanyActivityReportTask>(taskList.FirstOrDefault(t => t.OrganisationID == src.OrganisationID)), // 按机构ID匹配对应的备注并映射 ReportNotes = ctx.Mapper.Map<CompanyActivityReportNote>(noteList.FirstOrDefault(n => n.OrganisationID == src.OrganisationID)) }); c.CreateMap<TaskMain, CompanyActivityReportTask>(); c.CreateMap<NoteMain, CompanyActivityReportNote>(); }); config.AssertConfigurationIsValid(); var mapper = new Mapper(config); List<CompanyActivityReport> TestList = mapper.Map<List<CompanyActivityReport>>(OrganisationMainsList).ToList();
内容的提问来源于stack exchange,提问作者Adam Rudzinski
相关产品推荐
相关产品推荐

