2012-11-09 303 views
5

我有一個不能正常工作下面的代碼分組集合:映射使用AutoMapper

var groupedZones = this._zoneDataManager.GetZonesGroupedByCountry(); 
      IEnumerable<IGrouping<String, ZoneDTO>> zonesToReturn = Mapper.Map<IEnumerable<IGrouping<String, Zone>>, IEnumerable<IGrouping<String, ZoneDTO>>>(groupedZones); 

我不斷收到以下異常:

值 \「System.Collections.Generic。列表1[SCGRE.Business.Model.ZoneDTO]\" is not of type \"System.Linq.IGrouping 2 [System.String,SCGRE.Business.Model.ZoneDTO] \「 並且不能用於此泛型集合。\ r \ n參數名稱: 值

我不明白爲什麼它正試圖映射List<T>IGrouping<String, T>或者也許我沒有正確理解例外...但是我基本上有一個IEnumerable<IGrouping<String, Zone>>,我想它映射到IEnumerable<IGrouping<String, ZoneDTO>>

注意我創建了一個地圖從ZoneZoneDTO如下:

Mapper.CreateMap<Zone, ZoneDTO>(); 

那是因爲這兩個類都幾乎完全一樣的性質。

任何想法?

+0

我簡化了它並運行了一些單元測試,不幸的是它看起來不像目前支持的IGrouping。如果你在這裏沒有得到解決,你也可以嘗試[AutoMapper郵件列表](https://groups.google.com/forum/?fromgroups#!forum/automapper-users) – Mightymuke

回答

4

一些工作角落找尋後,我想你不能做某些事情像

Mapper.CreateMap<IEnumerable<IGrouping<String, Zone>>, IEnumerable<IGrouping<String, ZoneDTO>>>() 

具體而言,AutoMapper支持源集合類型包括:(僅Generic類型)

IEnumerable, IEnumerable<T>, ICollection, ICollection<T>, IList, IList<T>, List<T>, Arrays 

AutoMapper會不支持IGrouping,因爲它是非泛型可枚舉類型。

相反,你可以做以下簡單的方法,

var zones = this._zoneDataManager.GetZones(); // Write new method in your ZoneDataManager 
var zoneDTOs = Mapper.Map<List<Zone>, List<ZoneDTO>>(zones); 
IEnumerable<IGrouping<String, ZoneDTO>> zonesToReturn = zoneDTOs.GroupBy(z => z.Country); 

請閱讀this。希望這可以幫助。

+1

@TaniaMaria,你是否試過進場?請告訴我。 –

+1

我相信現在支持IGrouping。我能夠成功從IGrouping 映射到entityDto;如果單個映射配置完成,automapper會自動支持List <>到List <>映射 –