2016-07-22 13 views
0

Wenn ich die folgenden Klassen:Wie man eine Liste mit AutoMapper auf zwei Listen abbildet?

public MainModel 
{ 
    public List<ChildModel> Children {get; set;} 
} 

public ChildModel 
{ 
    public bool IsDifferent {get; set;} 
} 

public MainDto 
{ 
    public List<ChildDto> Children {get; set;} 
    public List<DifferentChildDto> Different {get; set;} 
} 

public ChildDto 
{ } 

public DifferentChildDto 
{ } 

AutoMapper verwenden, ist es möglich, die ChildModel Liste in zwei separate Listen auf dem Grundstück basierend aufzuspalten und Karte?

shoud Das Ergebnis Ende sein, dass Gegenstände mit IsDifferent Eigenschaftssatz in der Different Liste sein werden, während die übrigen Elemente in der Children Liste enthalten sind.

Das Mapping sollte auch umgekehrt funktionieren, dh. Fügen Sie die beiden DTO-Listen in die 1 Modellliste ein.

+0

In Bezug auf die umgekehrte Abbildung: Listen definiert werden als Sammlungen bestellt, so wie Sie erwarten, dass Sie die Reihenfolge der Elemente für die zusammengeführte Liste? – grek40

+0

@ grek40 Reihenfolge ist unwichtig. –

Antwort

0
Mapper.CreateMap<MainModel, MainDto>() 
    .ForMember(d => d.Children, o => o.MapFrom(s => s.Children.Where(c => !c.IsDifferent))) 
    .ForMember(d => d.Different, o => o.MapFrom(s => s.Children.Where(c => c.IsDifferent))); 

Mapper.CreateMap<ChildModel, ChildDto>(); 

Mapper.CreateMap<ChildModel, DifferentChildDto>(); 

Umkehrung dieses nicht so trivial ist, könnten Sie besser dran Posting, dass als eine separate Frage

+0

Wie ist ['Enumerable.Concat'] (https://msdn.microsoft.com/en-us/library/bb302894 (v = vs.100) .aspx) nicht trivial? Edit: ok, vielleicht sind die verschiedenen Typen ein Problem – grek40

+0

weil die Listen nicht den gleichen Typ haben (ChildrenDto vs DifferentChildDto) –

Verwandte Themen