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

AutoMapper如何将对象列表映射为包含嵌套列表的单个对象

实现List到嵌套列表结构EventLog对象的AutoMapper映射方案

1. 配置映射规则

首先在AutoMapper的自定义Profile中添加两类映射配置:

  • EventDTO到Event的基础映射:两个类字段名完全匹配,无需额外配置
  • List到EventLog的整体映射:取集合首元素的公共字段赋值给EventLog的顶层属性,集合整体映射为嵌套的Events列表
using AutoMapper;

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<EventDTO, Event>();
        
        CreateMap<List<EventDTO>, EventLog>()
            .ForMember(dest => dest.SystemId, opt => opt.MapFrom(src => src.First().SystemId))
            .ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.First().UserId))
            .ForMember(dest => dest.Events, opt => opt.MapFrom(src => src));
    }
}

2. 调用映射

完成Profile注册后,直接调用IMapper的Map方法即可完成转换:

// 示例源数据,所有元素SystemId、UserId一致
List<EventDTO> eventDtoList = GetYourDtoList();

// 转换为目标对象
EventLog result = _mapper.Map<EventLog>(eventDtoList);

可选优化

如果需要兼容空列表场景,避免空引用异常,可以修改映射配置的取值逻辑:

CreateMap<List<EventDTO>, EventLog>()
    .ForMember(dest => dest.SystemId, opt => opt.MapFrom(src => src.FirstOrDefault()?.SystemId ?? string.Empty))
    .ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.FirstOrDefault()?.UserId ?? string.Empty))
    .ForMember(dest => dest.Events, opt => opt.MapFrom(src => src ?? new List<EventDTO>()));

内容的提问来源于stack exchange,提问作者Rahul Bhosale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:15:01