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.Cars用Destination.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
定义Source和之间的映射OutputData.
Mapper.CreateMap<Source, OutputData>();
Run Code Online (Sandbox Code Playgroud)更新你的配置映射Destination.Output有OutputData.
Mapper.CreateMap<Source, Destination>().ForMember( dest => dest.Output, input =>
input.MapFrom(s=>Mapper.Map<Source, OutputData>(s)));
Run Code Online (Sandbox Code Playgroud)你可以这样做:
// 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)