2015-10-22 25 views

回答

3

使用PreCondition選項。這裏有一個簡單的例子:

public class Source 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

public class Dest 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public DateTime LastUpdated { get; set; } 
} 

如果LastUpdated當前年份是2015年的Name映射纔會發生:

Mapper.CreateMap<Source, Dest>() 
    .ForMember(d => d.Name, o => o.PreCondition((rc) => ((Dest) rc.DestinationValue).LastUpdated.Year == 2015)) 
    .ForMember(d => d.LastUpdated, o => o.Ignore()); 

Mapper.AssertConfigurationIsValid(); 

在下面的代碼中,「目標」對象將保留名稱「拉里「:

var src = new Source {Name = "Bob", Age = 22}; 
var dest = new Dest {Name = "Larry", LastUpdated = new DateTime(2014, 10, 11)}; 

Mapper.Map<Source, Dest>(src, dest); 

如果你改變了一年LastUpdated到2015年,Name屬性,都會更新爲‘鮑勃’ 。

+0

'Condition'和'PreCondition'之間的區別 – blockhead

+2

@blockhead,'Condition'只傳遞被映射到'DestinationValue'屬性中的當前目標屬性的值。 'PreCondition'爲你提供'DestinationValue'的整個目標對象。 – PatrickSteele