7

我有以下代码不起作用:

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.IGrouping2[System.String,SCGRE.Business.Model.ZoneDTO]\" 不能在此通用集合中使用。\r\n参数名称: 值

我不明白为什么它试图将 a 映射List<T>到 anIGrouping<String, T>或者我没有正确理解异常......但我基本上有一个IEnumerable<IGrouping<String, Zone>>并且我想将它映射到IEnumerable<IGrouping<String, ZoneDTO>>

请注意,我创建了一个从Zoneto的地图,ZoneDTO如下所示:

Mapper.CreateMap<Zone, ZoneDTO>();

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

有任何想法吗?

4

1 回答 1

7

经过一些工作后,我想你不能做一些事情

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

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

于 2012-11-09T14:19:05.453 回答