2015-01-02 45 views
0
Class SourceClass 
{ 
    string name {get;set;} 
    IList<TypeA> typeAList {get;set;} 
} 
Class DestinationClass 
{ 
    string name {get;set;} 
    IList<TypeB> typeBList {get;set;} 
} 

如何映射這兩個類使用automapper?自動映射轉換從列表<typeA>到類與列表<typeB>

嘗試1: - Mapper.CreateMap<SourceClass, DestinationClass>().ForMember(d => d.typeBList, s => s.MapFrom(x => x.typeAList.Select(a => new typeB() { prop1 = a.prop1, prop2 = a.prop2 }).ToList<typeB>()));

我正在運行時轉換錯誤這一點。

嘗試2: - Mapper.CreateMap<typeB,typeA>().ForMember(d=>d.prop1,opt=>opt.MapFrom(s=>s.prop1)); Mapper.CreateMap<SourceClass, DestinationClass>().ForMember(d => d.typeBList, s => s.MapFrom(x => x.typeAList));

錯誤: - 缺少類型映射配置或不支持的映射。

映射類型: 的typeA - >的TypeB

的typeA - >的TypeB

目標路徑: typeB.typeB0 [0]

Source值: 的typeA

+0

您還需要爲'TypeA'和'TypeB'創建映射。 aslo嘗試一次's.MapFrom(x => x.typeAList.Select(a => new typeB(){prop1 = a.prop1,prop2 = a.prop2})' – Satpal

+0

可以使用'covertusing()方法? – Dhinesh

回答

0

可以使用以下代碼爲自動映射器

Mapper.CreateMap<SourceClass ,DestinationClass>(); 
+0

但自動映射器將如何處理typeAList和typeBList之間的類型不匹配?我得到錯誤 – Dhinesh

+0

你的兩個類應該是相同的變量名稱,所以PLZ改變你的類變量名稱 – Dane

+0

它不是變量名稱,typeALList是自定義列表類型TypeA和typeBList是自定義類型typeB的列表,我想映射這兩者。 – Dhinesh

0

您需要映射前兩名類型和列表元素類型:

Mapper.CreateMap<SourceClass, DestinationClass>(); 
Mapper.CreateMap<TypeA, TypeB>(); 

AutoMapper地圖集合自動類型,但每個元素都單獨映射,所以你需要爲任何元素類型創建地圖。