自动化“扁平化”

时间:2011-12-01 19:04:30

标签: automapper

我试图将源列表的内容“展平”到Dest对象上的字段,如下所示:

class Source
{
    public IList<TypeX> TypeXs {get; set;}
}

class Dest
{
    public int IdentifierXValue { get; set;}
    public int IdentifierYValue { get; set;}
    public int IdentifierZValue { get; set;}
}

class TypeX
{
   Identifier Identifier {get; set;}
   float Value {get; set;}
}

enum Identifier 
{ 
    X,
    Y,
    Z
}

使用以下映射从源到dest的映射工作正常:

Mapper.CreateMap<Source, Dest>.ForMember( dest => dest.IdentifierXValue, opt =>     opt.MapForm(src => src.TypeXs.First(f => f.Identifier == Identifier.X).Value));

如何实现反向映射? “Source”引用已经存在,它将预先填充TypeX的引用。我只需要搜索其Identifier匹配的TypeX对象(比如X),对于该对象,我需要用Dest对象中的IdentifierXValue替换该值。

2 个答案:

答案 0 :(得分:1)

这对我有用

Mapper.CreateMap<Dest, Source>()
      .ForMember(d => d.TypeXs, opt => opt.Ignore())
      .AfterMap((s, d) =>
                         {
                          d.TypeXs.First(tx => tx.Identifier == Identifier.X).Value = s.IdentifierXValue;
                          d.TypeXs.First(tx => tx.Identifier == Identifier.Y).Value = s.IdentifierYValue;
                          d.TypeXs.First(tx => tx.Identifier == Identifier.Z).Value = s.IdentifierZValue;
                         }
                );

答案 1 :(得分:0)

我认为你需要一个custom type converter。这可能是最简单的方法。