automapper多对一映射

时间:2013-06-07 07:34:22

标签: c# automapper

我想将一种类型映射到其他类型,但我在第一种类型中有多个属性,这是获取其他类型的一个属性所必需的

例如

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

1 个答案:

答案 0 :(得分: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))

这使得AutoMapper在执行从A到B的映射时,使用从A到C的映射,用于成员z (由于src是A的实例,dest是C)的实例

<强>更新

如果您需要使用D类'Get方法从A到C进行映射,那么您可以使用AutoMapper中的ConstructUsing方法执行此操作。

AutoMapper.CreateMap<A,B>()
.ForMember(dest => dest.z, opt => opt.ConstructUsing(src => new D().Get(src));