2017-07-25 3 views
0

Ich verwende Nhibernate, um Elemente von einem Objekt zum anderen abzubilden. Für eines der Elemente in meinen komplexen Objekten muss jedoch eine Bedingung festgelegt sein, damit das Zielobjektelement über einen entsprechend festgelegten Wert verfügt.C# Automapper bedingte Zuordnung

Um im Detail

Mapper.CreateMap<OneObject, AnotherObject>() 
.ForMember( 
    destination => destination.complexelement, 
     option => option.MapFrom(source=> source.value == enumValue.ToString() 
     ? new object({Id 123 }) 
     : new object ({ Id 567 })) 

So zu erklären, können Sie sehen, dass ich ein verschachteltes Objekt auf dem Zielobjekt von einem Wert aus dem Quellobjekt basierend festlegen möge ein Objekt erstellen und es zum Ziel speichern Element. Der obige Beispielcode habe ich versucht, aber es wirft einen Fehler auf, der besagt, dass ich keine Zeichenfolge für einen Lambda-Ausdruck verwenden kann.

Weiß jemand, wie ich ein Objekt basierend auf einer Bedingung setzen kann?

Dank

+0

Was 'enumValue' ist? Und was ist der eigentliche Fehlertext? – stuartd

+0

Emumvalue ist nur zum Vergleich da. Fehlermeldung, die ich Ihnen gegeben habe – Andy5

Antwort

0

Ich denke, das wird für Sie arbeiten. Leider basiert es auf AutoMapper 6.1.1. Hoffe, dass Sie diese Version verwenden können. Da ich Ihre Klassenstruktur nicht kannte, habe ich einfache Testklassen erstellt, aber Sie sollten das Beispiel in Ihr Szenario übertragen können.

OneObject oo = new OneObject(); 
oo.value = "B"; 
Testenum enumValue = Testenum.A; 

Mapper.Initialize(a => a.CreateMap<OneObject, AnotherObject>() 
    .ForMember(
     destination => destination.complexelement, 
     option => option.MapFrom(source => source.value == enumValue.ToString() 
      ? 123 
      : 567))); 

AnotherObject ao = Mapper.Map<OneObject, AnotherObject>(oo); 

Testklassen und Enum

class OneObject 
{ 
    public string value { get; set; } 
} 

class AnotherObject 
{ 
    public object complexelement { get; set; } 
} 

enum Testenum 
{ 
    A, 
    B, 
    C 
} 
Verwandte Themen