2012-05-30 168 views
0

兩個相同類型的集合時重寫我有定義如下集合映射使用Automapper

Source { 

    public List<Driver> UnreportedDrivers { get; set; } // count 1 

    public List<Driver> LendingLossDrivers { get; set; } // count 2 

    public List<Driver> OtherDrivers { get; set; } // count 1 

} 

Destination { 

    public List<Driver> Drivers { get; set; } // expected count = 4 after mapping 

} 

我必須從源到目的地映射我的類。 我必須合併來自源的所有集合並將它們映射到目標。

我已經定義了我的映射如下。但是這段代碼並不能幫助我。 而不是合併所有集合,它只映射最後一個(UnreportedDrivers)覆蓋頂部的集合。

AutoMapper.Mapper.CreateMap<ServiceModel.MacReconciliationResponse, MacProcessContext>() 
       .ForMember(destination => destination.Drivers, source => source.MapFrom(s => s.OtherDrivers)) 
       .ForMember(destination => destination.Drivers, source => source.MapFrom(s => s.LendingLossDrivers)) 
       .ForMember(destination => destination.Drivers, source => source.MapFrom(s => s.UnreportedDrivers)); 

請在這種情況下幫助我。

在此先感謝。

回答

0

我只想.Concat每個列表,你想在一個.ForMember調用映射:

Mapper.CreateMap<Source, Destination>() 
    .ForMember(dest => dest.Drivers, opt => opt.MapFrom(src => src.LendingLossDrivers 
     .Concat(src.OtherDrivers) 
     .Concat(src.UnreportedDrivers))); 
+0

感謝您的快速回復。 –

+0

感謝您的快速回復。 我有一個附加組件的問題。 使用您的解決方案,我可以將所有三種類型的驅動程序映射到一個集合中。 我的目標對象有一個名爲DriverType的屬性,它有助於識別驅動程序的類型。 (Unreported/Other/etc) 在上面的代碼中,我如何根據我添加的集合設置目標屬性。 例如:我必須使用硬編碼 ReportType = OtherDriver集合項目的其他 ReportType =未報告UnreportedDriver集合項目。 在此先感謝 –

+0

@SandeepPinniti:這似乎是一個更難的要求。您可能不得不使用自定義解析程序。 –