簡體   English   中英

使用AutoMapper映射分組集合

[英]Mapping a grouped collection using 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.List 1[SCGRE.Business.Model.ZoneDTO]\\" is not of type \\"System.Linq.IGrouping 2 [System.String,SCGRE.Business.Model.ZoneDTO] \\”並且不能在此通用集合中使用。\\ r \\ nParameter name:value

我不明白為什么它試圖將List<T>映射到IGrouping<String, T>或者我可能沒有正確理解異常...但我基本上有一個IEnumerable<IGrouping<String, Zone>>我想將它映射到IEnumerable<IGrouping<String, ZoneDTO>>

請注意,我已創建從ZoneZoneDTO的地圖,如下所示:

Mapper.CreateMap<Zone, ZoneDTO>();

那是因為兩個類的屬性幾乎完全相同。

有任何想法嗎?

經過一些工作,我想你不能做一些事情

 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); 

請閱讀本文 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM