自动映像表达式必须解析为顶级成员

San*_*iti 23 .net automapper automapper-2

我正在使用automapper来映射源和目标对象.当我映射它们时,我得到以下错误.

表达式必须解析为顶级成员.参数名称:lambdaExpression

我无法解决问题.

我的源和目标对象是:

public partial class Source
{
        private Car[] cars;

        public Car[] Cars
        {
            get { return this.cars; }
            set { this.cars = value; }
        }
}

public partial class Destination
{
        private OutputData output;

        public OutputData Output
        {            
            get {  return this.output; }
            set {  this.output= value; }
        }
}

public class OutputData
{
        private List<Cars> cars;

        public Car[] Cars
        {
            get { return this.cars; }
            set { this.cars = value; }
        }
}
Run Code Online (Sandbox Code Playgroud)

我必须Source.CarsDestination.OutputData.Cars对象映射.你能帮帮我吗?

Pat*_*ins 34

您正在使用 :

 Mapper.CreateMap<Source, Destination>()
 .ForMember( dest => dest.OutputData.Cars, 
             input => input.MapFrom(i => i.Cars)); 
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为你在dest lambda中使用2级.

使用Automapper,您只能映射到1级.要解决此问题,您需要使用单个级别:

 Mapper.CreateMap<Source, Destination>()
 .ForMember( dest => dest.OutputData, 
             input => input.MapFrom(i => new OutputData{Cars=i.Cars})); 
Run Code Online (Sandbox Code Playgroud)

这样,您就可以将汽车设置为目的地.


k0s*_*tya 16

  1. 定义Source和之间的映射OutputData.

    Mapper.CreateMap<Source, OutputData>();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更新你的配置映射Destination.OutputOutputData.

    Mapper.CreateMap<Source, Destination>().ForMember( dest => dest.Output, input => 
        input.MapFrom(s=>Mapper.Map<Source, OutputData>(s))); 
    
    Run Code Online (Sandbox Code Playgroud)


Mar*_*s.D 7

你可以这样做:

// First: create mapping for the subtypes
Mapper.CreateMap<Source, OutputData>();

// Then: create the main mapping
Mapper.CreateMap<Source, Destination>().
    // chose the destination-property and map the source itself
    ForMember(dest => dest.Output, x => x.MapFrom(src => src)); 
Run Code Online (Sandbox Code Playgroud)

这是我的方式;-)


小智 7

ForPath 适用于这种情况。

Mapper.CreateMap<Destination, Source>().ForPath(dst => dst.OutputData.Cars, e => e.MapFrom(src => src.Cars));
Run Code Online (Sandbox Code Playgroud)