自动映射 - 用于IEnumerable将多个不同名称的属性进行映射

3

我有两个类:

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

and

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

我尝试将IEnumerable的SourceData映射到DestData,但是没有成功。

我尝试使用以下代码:

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

这对您来说不是一个有效的解决方案吗:http://stackoverflow.com/questions/21173057/automapper-map-objects-with-ienumerableanothertype - Tamas Ionut
2个回答

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
现在你的答案完全正确 - 这是因为我删除了我的不完整答案。 - VikciaR
请描述您在哪里遇到了什么问题。 - Shoaib Shakeel

1

你已经将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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接