我想将一种类型映射到其他类型,但我在第一种类型中有多个属性,这是获取其他类型的一个属性所必需的
例如
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
答案 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));