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パラメーター名: 値

なぜ aList<T>を anにマップしようとしているのかわからない、IGrouping<String, T>または例外を適切に理解していなかったのかもしれません...しかし、基本的に a があり、IEnumerable<IGrouping<String, Zone>>それをにマップしたいIEnumerable<IGrouping<String, ZoneDTO>>

次のように からZoneへのマップを作成したことに注意してください。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

AutoMapperIGroupingは非ジェネリックの列挙型であるためサポートしません。

代わりに、次の簡単なアプローチを実行できます。

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 に答える