C# · 12月 24, 2021

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

给定以下类: 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; }}

我打电话的时候

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

是否有可能让AutoMapper将Child.ChildId列表转换为Parentviewmodel.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}));

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

解决方法 使用LINQ查询只获取ChildIds: .ForMember(d => d.ChildIds,o => o.MapFrom(s => s.Children.Select(c => c.ChildId).ToArray()));