2012-11-09 18 views
5

ich den folgenden Code haben, der nicht funktioniert:Mapping eine gruppierte Sammlung mit AutoMapper

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

ich die folgende Ausnahme erhalte:

Der Wert \ "System.Collections.Generic. Liste 1[SCGRE.Business.Model.ZoneDTO]\" is not of type \"System.Linq.IGrouping 2 [System.String, SCGRE.Business.Model.ZoneDTO] \“ und kann in dieser generischen Sammlung verwendet werden \ r \ nParameter Name:. Wert

Ich verstehe nicht, warum es eine List<T> in eine IGrouping<String, T> abzubilden versucht, oder vielleicht habe ich die Ausnahme nicht richtig verstehen ... Aber ich habe im Grunde eine IEnumerable<IGrouping<String, Zone>> und ich möchte es zur Karte zu IEnumerable<IGrouping<String, ZoneDTO>>

Beachten Sie, dass ich habe eine Karte Zone-ZoneDTO wie folgt erstellt:

Mapper.CreateMap<Zone, ZoneDTO>(); 

Und das ist, weil beide Klassen fast genau die gleichen Eigenschaften haben.

Irgendwelche Ideen?

+0

Ich habe es vereinfacht und einige Komponententests ausgeführt, und es sieht leider nicht wie IGrouping derzeit unterstützt wird. Wenn Sie von hier keine Lösung erhalten, können Sie auch die [AutoMapper-Mailingliste] (https://groups.google.com/forum/?fromgroups#!forum/automapper-users) ausprobieren. – Mightymuke

Antwort

4

Nach einiger Arbeit nahe, ich denke, Sie nicht etwas tun kann wie

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

genauer zu sein, unterstützt AutoMapper die Quelle Sammlungstypen umfassen: (Nur Generic Typen)

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

AutoMapper wird unterstützt nicht IGrouping, weil es nicht generischer aufzählbarer Typ ist.

Stattdessen können Sie den folgenden einfachen Ansatz tun,

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

Bitte lesen Sie this. Hoffe das hilft.

+1

@TaniaMaria, Haben Sie das versucht? Ansatz? Lass es mich wissen, bitte. –

+1

Ich glaube, IGrouping wird jetzt unterstützt. Ich bin in der Lage erfolgreich von IGrouping zu entityDto zu mappen; Wenn die einzelnen Zuordnungen konfiguriert sind, unterstützt Autmapper automatisch List <> to List <> Zuordnungen –

Verwandte Themen