2011-06-20 58 views
5

給定以下類:自動映射:從自動對象中解析源屬性名稱

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)) 

是否可以解析目標對象上給定屬性的源屬性名稱:

類似於:

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

回答

7

因爲MapFrom()需要一個lambda,所以目標屬性可能映射到任何東西。 你可以使用任何你想要的lambda。試想一下:

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

因爲你不會被迫進行簡單的屬性訪問lambda表達式,你不能源表達減少到簡單的屬性名稱的字符串。

如果MapFrom()採取Expression<Func<TSource, TMember>>它可能會將表達式轉換爲字符串,但它不能按照它當前寫入的方式完成。

相關問題