自动映射:从自动对象中解析源属性名称

时间:2011-06-20 15:14:39

标签: c# .net automapper

鉴于以下类别:

public class User
{
  public int Id {get;set;}
  public PersonName Name {get;set;}
}

public class PersonName 
{
  public string FirstName {get;set;}
  public string LastName {get;set;}
}


public class UserDto 
{
  public int Id {get;set;}
  public string FirstName {get;set;}
}

以下映射配置:

 Mapper.CreateMap<User, UserDto>()
            .ForMember(destination => destination.FirstName, 
            options => options.MapFrom(source => source.Name.FirstName))

是否可以解析目标对象上给定属性的source属性的名称:

类似的东西:

Assert.AreEqual(GetSourcePropertyName<User, UserDto>("FirstName"), "Name.FirstName")

1 个答案:

答案 0 :(得分:7)

因为MapFrom()接受lambda,所以目标属性可能映射到任何东西。 你可以使用你想要的任何lambda。考虑一下:

.ForMember(
    destination => destination.FullName,  
    options => options.MapFrom(source => source.Name.FirstName + " " + source.Name.LastName)
);

因为您没有被迫创建简单的属性访问器lambdas,所以不能将源表达式简化为简单的属性名称字符串。

如果MapFrom()接受Expression<Func<TSource, TMember>>,则可以将表达式转换为字符串,但不能按照当前编写的方式完成。