[英]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>>
請注意,我已創建從Zone
到ZoneDTO
的地圖,如下所示:
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.