2017-01-31 2 views
2

Ich muss eine Int-Eigenschaft aus einer Liste von Objekten zu einer List<int> zuordnen. Hier ist, was meine Klassenstruktur wie folgt aussieht:Automapper map int Eigenschaftswerte von Liste <type> bis Liste <int>

ich eine Elternklasse haben:

public class Parent 
{ 
    ... 
    public List<Location> Locations { get; set; } 
} 

Location-Klasse:

public class Location 
{ 
    public int LocationId { get; set; } 
    public string Name { get; set; } 
} 

Zielklasse für die Zuordnung:

public class Destination 
{ 
    ... 
    public List<int> Locations { get; set; } 
} 

Hier ist der Code, den ich verwende, um die Zuordnung zwischenzu erreichenbis List<int>:

CreateMap<Parent, Destination>() 
.ForMember(d => d.Locations, o => o.MapFrom(s => s.Locations.Select(l => l.LocationId))) 

Dies funktioniert nicht. Ich bekomme folgende Fehlermeldung:

AutoMapper.AutoMapperMappingException: Unable to create a map expression from Location.LocationId (System.Collections.Generic.IEnumerable`1[System.Int32]) to Destination.Locations (System.Collections.Generic.List`1[System.Int32])

Irgendeine Idee, was ich nicht richtig mache?

+1

Haben Sie versucht, .ToList() am Ende Ihrer Auswahl? – JamesT

+0

Gute Idee. Ich habe das versucht und es scheint, es behandelt zu haben. Vielen Dank! – DCATEK

Antwort

2

Als Ausnahme sagt:

AutoMapper.AutoMapperMappingException: Unable to create a map expression from Location.LocationId (System.Collections.Generic.IEnumerable1[System.Int32]) to Destination.Locations (System.Collections.Generic.List1[System.Int32])

Ich glaube, dass dies geschieht, weil Sie eine IEnumerable in einer Liste abzubilden versuchen. Sie fügen dem Kartenausdruck nach dem Select entweder ToList() hinzu. (nicht empfohlen) Oder deklarieren Sie die Locations Eigenschaft als IEnumerable<int> in Ihrer Zielklasse.

+1

Das hat JamesT in den obigen Kommentaren vorgeschlagen. Das hat mir das Problem gelöst. Vielen Dank! – DCATEK

+0

Es stellte sich heraus, dass ich auch ein Mapping für "Location to int" hinzufügen musste, wie es Chris Pickford unten vorgeschlagen hat. Das plus die .ToList() löste mein Problem. – DCATEK

-1

Sie benötigen AutoMapper Konfiguration zu verändern, zu kartieren zwischen Location und int dann erledigt den Rest für Sie nimmt:

cfg.CreateMap<Location, int>().ConvertUsing(source => source.LocationId); 
cfg.CreateMap<Parent, Destination>().ForMember(dest => dest.Locations, opts => opts.MapFrom(src => src.Locations)); 

this Gist Siehe zum Beispiel arbeiten.

+0

@ downvoter - Möchten Sie erklären, wie diese Antwort falsch ist oder verbessert werden kann? –

+0

Nicht sicher, warum Sie eine Down-Abstimmung erhalten haben. Ich musste Ihre erste Codezeile verwenden, um die richtige Antwort zu erhalten. – DCATEK

Verwandte Themen