53

次のエンティティ(クラス)があるとします

public class Target
{
    public string Value;
}


public class Source
{
    public string Value1;
    public string Value2;
}

ここで、自動マップを構成して、Value1 が「A」で始まる場合は Value1 を Value にマップしますが、それ以外の場合は Value2 を Value にマップします。

これは私がこれまでに持っているものです:

Mapper
    .CreateMap<Source,Target>()
    .ForMember(t => t.Value, 
        o => 
            {
                o.Condition(s => 
                    s.Value1.StartsWith("A"));
                o.MapFrom(s => s.Value1);
                  <<***But then how do I supply the negative clause!?***>>
            })

ただし、以前の条件が失敗した場合にAutoMappers.Value2に実行するように指示する方法は、まだわかりません。

API の設計が不十分だったように思えますが、私の知識不足が邪魔をしているのかもしれません。

4

4 に答える 4

4

条件付きマッピングでは、指定された宛先プロパティに対してマッピングを実行する必要がある場合にのみ構成できます。

つまり、同じ宛先プロパティに対して異なる条件で 2 つのマッピングを定義することはできません。

「条件が真の場合はPropertyAを使用し、それ以外の場合はPropertyBを使用する」などの条件がある場合は、「Tejal」が書いたように行う必要があります。

opt.MapFrom(src => src.Value1.StartsWith("A") ? src.Value1 : src.Value2)
于 2015-11-05T11:17:53.467 に答える
2

AutoMapper を使用すると、プロパティがマップされる前に満たさなければならない条件をプロパティに追加できます。

私はいくつかの列挙条件を使用してマッピングを行っていましたが、私の側から見ると、コミュニティにとってほとんど労力がかかりません。

}

.ForMember(dest => dest.CurrentOrientationName, 
             opts => opts.MapFrom(src => src.IsLandscape? 
                                        PageSetupEditorOrientationViewModel.Orientation.Landscape : 
                                        PageSetupEditorOrientationViewModel.Orientation.Portrait));
于 2016-09-02T12:55:22.470 に答える