2017-07-25 33 views
0

nhibernateを使用してあるオブジェクトから別のオブジェクトに要素をマップしています。しかし、私の複雑なオブジェクト内の要素の1つは、目的のオブジェクト要素がそれに応じて値を設定するために条件を設定する必要があります。C#Automapper条件付きマッピング

ので、詳細に

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

を説明するために、あなたは私がオブジェクトを作成し、宛先にそれを保存するために、ソースオブジェクトからの値に基づいて送信先オブジェクトにネストされたオブジェクトを設定したいことがわかります素子。上記のサンプルコードは試しましたが、ラムダ式で文字列を使用できないというエラーが発生しています。

条件に基づいてオブジェクトを設定する方法を知っている人はいますか?

ありがとうございます。

+0

'enumValue'何ですか?実際のエラーテキストは何ですか? – stuartd

+0

emumvalueは比較のためだけにあります。私があなたに与えたエラーメッセージ – Andy5

答えて

0

私はこれがうまくいくと思います。残念ながら、これはAutoMapper 6.1.1に基づいています。あなたはこのバージョンを使いたいと思っています。私はあなたのクラス構造を知らなかったので、私は単純なテストクラスを作成しましたが、あなたのシナリオにサンプルを移すためには、あなたは無駄であるべきです。

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); 

テストクラスと列挙

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

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

enum Testenum 
{ 
    A, 
    B, 
    C 
}