使用Automapper将集合的属性映射到基元数组

lam*_*tor 10 c# automapper asp.net-mvc-3

给定以下类:

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; }
}
Run Code Online (Sandbox Code Playgroud)

我打电话的时候

Mapper.Map<Parent, ParentViewModel>(vm);
Run Code Online (Sandbox Code Playgroud)

是否有可能让AutoMapper将列表转换Child.ChildIdParentViewModel.ChildIds

我尝试过这样的事情:

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}));
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误,说它不知道如何将Child对象列表转换为int16.有什么建议?

Pat*_*ele 13

使用LINQ查询只获取ChildIds:

.ForMember(d => d.ChildIds, o => o.MapFrom(s => s.Children.Select(c => c.ChildId).ToArray()));
Run Code Online (Sandbox Code Playgroud)

  • 好的。并且不需要 .ToArray() (2认同)