You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:36:07