AutoMapper:如何进行简单的展平

时间:2012-07-26 21:26:21

标签: automapper

我需要:

// SOURCE
class A { 
  public B B;
  public C C;
}

class B { public int X; }
class C { public int Y; }

// DESTINATION
class D { 
  public int X; 
  public int Y;
}

// I want to configure following operation
// without mapping each (X and Y) fields explicitly.
D.X = A.B.X;
D.Y = A.C.Y;


// here is the essence of what I am trying to accomplish.
Mapper.CreateMap<B, D>();
Mapper.CreateMap<C, D>();
var map = Mapper.CreateMap<A, D>();
map.ForMember(dst => dst, opt => opt.MapFrom(src => src.B));
map.ForMember(dst => dst, opt => opt.MapFrom(src => src.C));

有什么建议吗?

注意:我知道如果我将D.X更改为D.BX而将D.Y更改为D.CY,它将起作用。我想在不添加D属性的前提下完成此操作。我也可以通过使用Map的“填充”版本来实现这一点。

1 个答案:

答案 0 :(得分:0)

// I want to configure following operation
// without mapping each (X and Y) fields explicitly.
D.X = A.B.X;
D.Y = A.B.Y;

根据你的班级,B没有Y.B有X.你的意思是D.Y = A.C.Y?如果是这样的话:

Mapper.CreateMap<A, D>()
    .ForMember(d => d.X, o => o.MapFrom(s => s.B.X))
    .ForMember(d => d.Y, o => o.MapFrom(s => s.C.Y))
;