2011-12-01 131 views
1

我想“变平”源列表的内容到目的地对象上的字段,如下所示:从源到DESTAutomapper“扁平化”

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 
} 

测绘工作正常使用下面的映射:

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

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

回答

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; 
         } 
       ); 
+0

那正是我一直在寻找。非常感谢。 – rhk98