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

如何用AutoMapper将IEnumerable<Contract>扁平映射为IEnumerable<MyClass>

使用AutoMapper将IEnumerable映射为扁平化的IEnumerable

要实现把所有Contract实例中的InnerClass对象合并转换为MyClass集合,需要分两步配置AutoMapper:

1. 配置InnerClass到MyClass的字段映射

因为目标类属性名和源类不一致,需要显式指定成员映射规则:

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        // 映射InnerClass到MyClass,处理属性名差异
        CreateMap<InnerClass, MyClass>()
            .ForMember(dest => dest.IdWithDifferentName, opt => opt.MapFrom(src => src.Id))
            .ForMember(dest => dest.ValueWithDifferentName, opt => opt.MapFrom(src => src.Value));

2. 配置集合的扁平化映射

自定义IEnumerable<Contract>到IEnumerable<MyClass>的转换逻辑,通过SelectMany展开所有Contract中的MyConfig集合,再逐个转换为MyClass:

// 自定义集合映射,扁平化所有InnerClass并转换
        CreateMap<IEnumerable<Contract>, IEnumerable<MyClass>>()
            .ConvertUsing((source, _, context) => source
                // 处理MyConfig可能为null的情况,避免空引用异常
                .SelectMany(contract => contract.MyConfig ?? Enumerable.Empty<InnerClass>())
                .Select(inner => context.Mapper.Map<MyClass>(inner))
            );
    }
}

初始化AutoMapper并调用

在应用启动时注册映射配置:

var mapperConfig = new MapperConfiguration(cfg =>
{
    cfg.AddProfile<MappingProfile>();
});
IMapper mapper = mapperConfig.CreateMapper();

之后即可用你原本的调用方式完成映射:

var configs = mapper.Map<IEnumerable<MyClass>>(response);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:04:50