2016-07-22 92 views
0

如果我有以下类:如何使用AutoMapper将一个列表映射到两个列表?

public MainModel 
{ 
    public List<ChildModel> Children {get; set;} 
} 

public ChildModel 
{ 
    public bool IsDifferent {get; set;} 
} 

public MainDto 
{ 
    public List<ChildDto> Children {get; set;} 
    public List<DifferentChildDto> Different {get; set;} 
} 

public ChildDto 
{ } 

public DifferentChildDto 
{ } 

使用AutoMapper,是有可能分裂,映射ChildModel列表分为2只独立列出了基于财产?

最终结果应该是IsDifferent属性集的项目将位于Different列表中,而其余项目位于Children列表中。

映射也应该反向工作,即。将两个DTO列表合并到1个模型列表中。

+0

关于反向映射:为有序的收藏列表定义,所以你怎么能指望项目的顺序合并名单? – grek40

+0

@ grek40顺序不重要。 –

回答

0
Mapper.CreateMap<MainModel, MainDto>() 
    .ForMember(d => d.Children, o => o.MapFrom(s => s.Children.Where(c => !c.IsDifferent))) 
    .ForMember(d => d.Different, o => o.MapFrom(s => s.Children.Where(c => c.IsDifferent))); 

Mapper.CreateMap<ChildModel, ChildDto>(); 

Mapper.CreateMap<ChildModel, DifferentChildDto>(); 

扭转这一不为小事,你可能会更好张贴,作为一个单独的问题

+0

['Enumerable.Concat'](https://msdn.microsoft.com/en-us/library/bb302894(v = vs.100).aspx)是不是微不足道的?编辑:好吧,也许不同的类型是一个问题 – grek40

+0

,因为列表将不会有相同的类型(ChildrenDto与DifferentChildDto) –

相关问题