我有以下代码无法正常工作:

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

我不断收到以下异常:



我不明白为什么它要尝试将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);

请阅读this。希望这可以帮助。

10-08 09:20