2016-06-21 52 views
0

一個項目映射陣列I具有類的類:如何在目的地使用Automapper

class A 
{ 
    public string str1 { get; set; } 
    public string str2 { get; set; } 
    public string str3 { get; set; } 
} 

class B 
{ 
    public string bstr1 { get; set; } 
    public string bstr2 { get; set; } 
} 

class C 
{ 
    public string cstr1 { get; set; } 
    public IEnumerable<B> barr1 { get; set; } 
} 

如何創建像

this.CreateMap<A, C>() 
    .ForMember(dest => dest.cstr1, exp => exp.MapFrom(scc => scc.str1)) 
    .ForMember(dest => dest.barr1, exp => exp.MapFrom(scc => scc)) 
    .IgnoreAllNonExisting(); 

this.CreateMap<A, B[]>() 
    .ForMember(dest => dest[0].bstr1, exp => exp.MapFrom(scc => scc.str2)) 
    .ForMember(dest => dest[0].bstr2, exp => exp.MapFrom(scc => scc.str3)) 
    .IgnoreAllNonExisting(); 

通過簡單的詞語映射如何將對象映射到所述第一項目標中的數組。

回答

1

你可以這樣做:

Mapper.CreateMap<A, B>() 
     .ForMember(dest => dest.bstr1, exp => exp.MapFrom(src => src.str2)) 
     .ForMember(dest => dest.bstr2, exp => exp.MapFrom(src => src.str3)); 

Mapper.CreateMap<A, C>() 
     .ForMember(dest => dest.cstr1, exp => exp.MapFrom(scc => scc.str1)) 
     .ForMember(dest => dest.barr1, exp => exp.ResolveUsing<AToBCollectionResolver>()); 

其中AToBCollectionResolver

class AToBCollectionResolver : ValueResolver<A, IEnumerable<B>> 
{ 
    protected override IEnumerable<B> ResolveCore(A source) 
    { 
     return new[] { Mapper.Map<B>(source)}; 
    } 
}