自动映射 - 用于IEnumerable映射具有不同名称的多个属性

时间:2015-04-01 09:29:14

标签: c# automapper

我有两节课 说:

  public class SourceData
        {
            public string SourceCode { get; set; }        
            public string SourceName { get; set; }
        }

public class DestData
    {
        public string Code { get; set; }
        public string DestName { get; set; }
    }

我尝试将SourceData的IEnumerable映射到DestData,但它无法正常工作

我尝试

AutoMapper.Mapper.CreateMap<IEnumerable<SourceData >, IEnumerable<DestData>>()

2 个答案:

答案 0 :(得分:4)

两个类都有不同名称的字段。 AutoMapper不会自动拾取它们。因此,您需要明确告诉它如何映射两个类中的字段。你这样做。

Mapper.CreateMap<SourceData, DestData>()
   .ForMember(dest => dest.DestName, a => a.MapFrom(src => src.SourceName))
   .ForMember(dest => dest.Code, a => a.MapFrom(src => src.SourceCode))

请注意,您在类型本身之间创建地图而不是在类型集合之间创建地图,因为AutoMapper将自动处理集合。接下来只需使用以下地图:

var destList= Mapper.Map<List<DestData>>(sourceList);

Mapper.Map<List<SourceData>, List<DestData>>(sourceList, destList);

取决于您的情况。

答案 1 :(得分:1)

Mapper.Map&gt;(someDataEnum)您是否已将SourceData映射到DestData?您不必映射集合。

var configuration = Mapper.Configuration;

configuration.CreateMap<SourceData, DestData>()
    .ForMember(lite => lite.Code, src => src.MapFrom(post => post.SourceCode))
    .ForMember(lite => lite.DestName, src => src.MapFrom(post => post.SourceName))

并映射

var destDataCollection= Mapper.Map<IEnumerable<SourceData>, IEnumerable<DestData>>(sourceDataCollection);