2

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

例如

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

这告诉 AutoMapperz在进行从 A 到 B 的映射时使用从 A 到 C 的映射(因为src是 A 的实例并且dest是 C 的实例)

更新

如果您需要使用您的D类的Get方法来进行从 A 到 C 的映射,那么您可以使用ConstructUsingAutoMapper 中的方法来完成。

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