使用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 n参数名称: 值

我不明白为什么它试图将List<T>映射到IGrouping<String, T>中,或者也许我不正确理解异常...但是我基本上有IEnumerable<IGrouping<String, Zone>>,我想将其映射到IEnumerable<IGrouping<String, ZoneDTO>>

请注意,我已经创建了从ZoneZoneDTO的地图,如下所示:

Mapper.CreateMap<Zone, ZoneDTO>();

这是因为两个类都具有几乎完全相同的属性。

有什么想法?

在某些工作around之后,我想你不能做一些

之类的事情
 Mapper.CreateMap<IEnumerable<IGrouping<String, Zone>>, IEnumerable<IGrouping<String, ZoneDTO>>>()

是特定的,自动应用程序支持源收集类型包括:(仅Generic类型)

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

自动应用程序将不支持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); 

请阅读此。希望这会有所帮助。

最新更新