2017-11-21 4 views
1

Ich habe ein Objekt so:AutoMapper Abbilden des ersten Elements in einem Array und anderen Eigenschaften

public class TopLevel{ 
    public string AProperty {get;set;} 
    public int AnotherProperty {get;set;} 
    public SecondLevel[] SecondLevels {get;set;} 
} 

public class SecondLevel{ 
    public string AThing {get;set;} 
    public int AnotherThing {get;set;} 
} 

dies möchte ich dies zur Karte:

public class JoinedClass{ 
    public string AProperty {get;set;} 
    public int AnotherProperty {get;set;} 
    public string Athing {get;set;} 
    public string AnotherThing {get;set;} 
} 

mit dem FirstOrDefault Mitglied des SecondLevels Array . Ich nehme an, das ist möglich, aber scheint nicht zu funktionieren, wie es geht.

ich versucht habe ...

CreateMap<TopLevel, JoinedClass>() 
    .ForAllMembers(opt=>opt.MapFrom(tl=>tl.SecondLevels.FirstOrDefault()) 
    .ForMemeber(jc=>jc.AProperty, opt=>opt.MapFrom(tl=>tl.AProperty) 
    .ForMemeber(jc=>jc.AnotherProperty , opt=>opt.MapFrom(tl=>tl.AnotherProperty); 

aber das scheint nicht überhaupt keine Eigenschaften abzubilden. Ich habe auch die ForAllMembers() letzte in der obigen Zuordnung, mit keinem Glück entweder. Ich bin mit AutoMapper 6.2.0

+0

Was meinst du mit "scheint nicht zu funktionieren", und welchen Fehler hast du? –

Antwort

0

Ich denke nicht, Sie ForAllMembers verwenden können Sie immer eine für eine Karte kann, ist hier ein Beispiel

Setup-Mapping Config

public static MapperConfiguration SetupMapping() 
{ 
    return new MapperConfiguration(cfg => 
    { 
     cfg.CreateMissingTypeMaps = true; 
     cfg.CreateMap<TopLevel, JoinedClass>() 
      .ForMember(jc => jc.Athing, opt => opt.MapFrom(t1 => t1.SecondLevels.FirstOrDefault().AThing)) 
      .ForMember(jc => jc.AnotherThing, opt => opt.MapFrom(t1 => t1.SecondLevels.FirstOrDefault().AnotherThing)) 
      ; 
    }); 
} 

Beispiel

var seconds = new SecondLevel[] { 
new SecondLevel { AThing = "one", AnotherThing = 1 }, 
new SecondLevel { AThing = "two", AnotherThing = 2 } 
     }; 

var toplevel = new TopLevel { AProperty = "top", AnotherProperty = 99, SecondLevels = seconds }; 

MapperConfiguration config = SetupMapping(); 
IMapper mapper = config.CreateMapper(); 

var result = mapper.Map<JoinedClass>(toplevel); 
Verwandte Themen