Mapping a grouped collection using AutoMapper

不羁岁月 提交于 2019-12-12 11:05:13

问题


I have the following code which is not working:

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

I keep getting the following exception:

The value \"System.Collections.Generic.List1[SCGRE.Business.Model.ZoneDTO]\" is not of type \"System.Linq.IGrouping2[System.String,SCGRE.Business.Model.ZoneDTO]\" and cannot be used in this generic collection.\r\nParameter name: value

I do not understand why it is trying to map a List<T> into an IGrouping<String, T> or maybe I did not understand the exception properly... But I basically have an IEnumerable<IGrouping<String, Zone>> and I want to map it to IEnumerable<IGrouping<String, ZoneDTO>>

Note that I have created a map from Zone to ZoneDTO as follows:

Mapper.CreateMap<Zone, ZoneDTO>();

And that's because both classes have almost exactly the same properties.

Any ideas?


回答1:


After some work arround, I guess you cannot do some thing like

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

To be specific, AutoMapper supports the source collection types include: (Only Generic types)

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

AutoMapper will not support IGrouping because it is non-generic enumerable type.

Instead you can do the following simple approach,

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

Please read this. Hope this helps.



来源:https://stackoverflow.com/questions/13305391/mapping-a-grouped-collection-using-automapper

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!