2011-04-27 271 views
4

我環顧四周,無法完全找到我的問題的答案。我要做的是有條件的映射目標對象(不是字段/屬性,對象)。換句話說,這樣的事情:AutoMapper - 條件映射

public class Source 
{ 
    public int Id {get; set;} 
    public string Flag {get; set;} 
} 
public class Destination 
{ 
    public int Id {get; set;} 
} 

var sources = new List<Source> 
        { 
         new Source{Flag = "V", Id = 1}, 
         new Source{Flag = "B", Id = 2} 
        }; 

var destinations = Mapper.Map<List<Source>, List<Destination>>(sources); 

destinations.Count.ShouldEqual(1); 
destinations[0].Id.ShouldEqual(2); 

有沒有人知道如何配置類型映射?我正在尋找類似的東西:

Mapper.CreateMap<Source, Destination>() 
    .SkipIf(src => src.Flag != "B"); 

我只是沒有看到任何東西似乎支持這一點的配置選項。任何幫助將非常感激!提前致謝。

回答

6

AFAIK目前沒有什麼內置的允許你實現這一點。你可以做以下,但:

var destinations = Mapper.Map<List<Source>, List<Destination>>(
    sources.Where(source => source.Flag == "B") 
); 
4

這不是偉大的,因爲你有效地結束了自己做的映射....但其確定爲特殊情況下,允許映射邏輯被內部包含....

config.CreateMap<Source, Destination>() 
      .AfterMap((source, dest) => 
      { 
       if (source.Flag == "B") 
       { 
        //do stuff 
       } 
      });