automapper:从数组映射到一个字段?

Mar*_*tin 1 c# automapper

我在尝试将数组映射到类型时遇到问题....我收到以下错误

缺少类型映射配置或不支持的映射.

映射类型:运行[] - >运行

目标项是Run,源是Run(数组)....我在global.asax中设置了映射

Missing type map configuration or unsupported mapping.

Mapping types:
Run[] -> Run
Run Code Online (Sandbox Code Playgroud)

任何想法,我想我错过了一些东西.

感谢任何帮助

谢谢

Pat*_*iek 6

当您指定了类型映射时,AutoMapper可以自动映射集合到集合,所以当您有:

Mapper.CreateMap<Model.Run, Run>();
Run Code Online (Sandbox Code Playgroud)

你可以去

var runs = Mapper.Map<IEnumerable<Model.Run>, IEnumerable<Run>>(source);
Run Code Online (Sandbox Code Playgroud)

因为它自然而然 - 它使用您指定的一对一地图将源集合的每个项目映射到目标集合.不遵循的是自动T -> T[]T[] -> T映射,映射器映射时应该做什么T[] -> T?从数组中取出第一项?或者也许是最后一个?做某种聚合?如果收集是空的怎么办?

你必须为它写一个单独的完整地图,例如:

Mapper.CreateMap<Model.Run[], Run>()
      .ForMember(x => x.NumericMember, expr => expr.MapFrom(y => y.Sum(z => z.NumericMember)))
      .ForMember(//etc...);
Run Code Online (Sandbox Code Playgroud)