2012-09-14 10 views
6

Ho due sub di classe che ho bisogno di copiare un elemento di elenco da in un oggetto masterautomapper multi oggetti a un oggetto

public Class Foo1 : Anote 
{ 
    public bool Ison { get; set;} 
    public List<Anote>Anotes { get; private set;} 

    public Foo1() 
    { 
    this.Anotes = new List<Anote>(); 
    } 
} 

public Class Foo2 : Bnote 
{ 
    public bool Ison { get; set;} 
    public List<Bnote>Anotes { get; private set;} 

    public Foo2() 
    { 
    this.Anotes = new List<Bnote>(); 
    } 
} 

public Class Foo3 : Cnote 
{ 
    public bool Ison { get; set;} 
    public List<Cnote>Anotes { get; private set;} 
    public List<Cnote>Bnotes { get; private set; } 

} 

sarò retreiving i dati da un database e mettere questi dati in foo1 e foo2 . Ho quindi bisogno di per mappare i dati di lista da Foo1 e Foo2 negli elementi di Lista in Foo3.

ho fatto

Foo1A foo1a = new Foo1A(); 
Foo2A foo2a = new Foo2A(); 

Mapper.CreateMap<Foo1, Foo1A>(); 
Mapper.CreateMap<Foo2, F002A>(); 
Mapper.Map<Foo1, Foo2A>(foo1, foo1a); 
Mapper.Map<Foo2, F002A>(foo2, foo2a); 

e questo funziona, ma quello che ho bisogno di fare è

Mappa Elenco ANOTES in foo1 a elenco ANOTES in Foo3 Mappa Elenco ANOTES in foo2 a elenco Bnotes in Foo3.

risposta

7

Si dovrebbe solo essere in grado di fare:

Mapper.CreateMap<ANote, CNote>(); 

Mapper.CreateMap<Foo1, Foo3>() 
    .ForMember(dest => dest.ANotes, opt => opt.MapFrom(src => src.ANotes)) 
    .ForMember(dest => dest.BNotes, opt => opt.Ignore()); 

Mapper.CreateMap<Foo2, Foo3>() 
    .ForMember(dest => dest.BNotes, opt => opt.MapFrom(src => src.ANotes)) 
    .ForMember(dest => dest.ANotes, opt => opt.Ignore()); 

Foo3 foo3 = new Foo3(); 

Mapper.Map<Foo1, Foo3>(foo, foo3); 
Mapper.Map<Foo2, Foo3>(foo2, foo3); 

foo3.ANotes e foo3.BNotes dovrebbe entrambi sono stati mappati in modo corretto.

+0

Per chiunque altro si imbatta in questo, ho cercato di utilizzare questa soluzione per unire due elenchi di oggetti. Non sono stato in grado di capire come farlo funzionare. Ho dovuto usare un foreach e quindi mappare ogni elemento e aggiungerlo manualmente a un elenco. – Icestorm0141

+0

@ Icestorm0141: hai una nuova domanda aperta? –

+0

Nella seconda mappatura da Foo2 a Foo3, ad esempio, '.ForMembro (dest => dest.BNotes, opt => opt.MapFrom (src => src.ANotes))' non dovrebbe questo 'be src, BNotes' invece di' src.ANotes'? –

Problemi correlati