2

あるタイプを別のタイプにマップしたいのですが、最初のタイプに複数のプロパティがあり、他のタイプの 1 つのプロパティを取得するために必要です

例えば

public class A
{ 
    public int a{get;set;}
    public int b{get;set;}
    public int c{get;set}
}

public class B
{ 
    public C z{get;set;}
    public int c{get;set}
}

public class C
{ 
    public int a{get;set;}
    public int b{get;set;}
    public int Total{get;set}
}

public class D
{
    public C Get(A a)
    {
       var c = new C();
       c.a = a.a;
       c.b= b.a;
       c.c = c.a + c.b;
       return c
    }   
}

ここで A を B にマッピングしたいので、Automapper を使用してどのように行うことができますか

4

1 に答える 1

3

ForMember次のように、単純型から複合型にマップするために使用できます。

AutoMapper.CreateMap<A,B>()
.ForMember(dest => dest.z.a, opt => opt.MapFrom(src => src.a));

ForMemberこれらの呼び出しは、必要な数だけ連鎖させることができます。

別のアプローチは、A から C へのマップを次のように構成することです。

AutoMapper.CreateMap<A,C>();

そして、A から B へのマッピングでは、次のように言えます。

AutoMapper.CreateMap<A,B>()
.ForMember(dest => dest.z, opt => opt.MapFrom(src => src))

zこれは AutoMapper に、A から B へのマッピングを実行するときにメンバーに A から C へのマッピングを使用するように指示します (srcは Adestのインスタンスであり、C のインスタンスであるため)。

アップデート

Dクラスのメソッドを使用してGetA から C へのマッピングを行う必要がある場合ConstructUsingは、AutoMapper のメソッドを使用して行うことができます。

AutoMapper.CreateMap<A,B>()
.ForMember(dest => dest.z, opt => opt.ConstructUsing(src => new D().Get(src));
于 2013-06-07T07:40:02.777 に答える