2011-10-05 33 views
6

se tenga lo siguiente conjunto de clases:Usando AutoMapper para mapear una propiedad de una colección de una gran variedad de primitivas

class Parent 
{ 
    string Name { get; set; } 
    List<Child> children { get; set; } 
} 
class Child 
{ 
    short ChildId { get; set; } 
    string Name { get; set; } 
} 

class ParentViewModel 
{ 
     string Name { get; set; } 
     short[] ChildIds { get; set; } 
} 

Cuando llamo

Mapper.Map<Parent, ParentViewModel>(vm); 

¿Es posible obtener AutoMapper para traducir el lista de Child.ChildId a ParentViewModel.ChildIds?

He intentado hacer algo como esto:

Mapper.CreateMap<Child, short>() 
    .FromMember(dest => dest, opt => opt.MapFrom(src => src.ChildId)); 
Mapper.CreateMap<Parent, ParentViewModel>() 
    .FromMember(dest => dest.ChildIds, opt => opt.MapFrom(src => new[] {src.children})); 

pero me da un error que dice que no sabe cómo convertir una lista de los objetos secundarios a un Int16. ¿Alguna sugerencia?

Respuesta

12

Utilice una consulta LINQ para agarrar sólo los ChildIds:

.ForMember(d => d.ChildIds, o => o.MapFrom(s => s.Children.Select(c => c.ChildId).ToArray())); 
+0

sabía que debía ser algo tan simple como que .. gracias !! – lambinator

+0

¡OMG esto fue súper útil! – starmandeluxe

Cuestiones relacionadas