オートマッパーを使用して、ソースオブジェクトと宛先オブジェクトをマップしています。それらをマップしている間、以下のエラーが発生します。
式はトップレベルのメンバーに解決される必要があります。パラメータ名: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; }
}
}
マップする必要がありますSource.Cars
とDestination.OutputData.Cars
オブジェクト。これで私を助けてくれませんか?
あなたが使用している:
Mapper.CreateMap<Source, Destination>()
.ForMember( dest => dest.OutputData.Cars,
input => input.MapFrom(i => i.Cars));
Destラムダで2レベルを使用しているため、これは機能しません。
Automapperを使用すると、1つのレベルにのみマップできます。問題を解決するには、単一のレベルを使用する必要があります。
Mapper.CreateMap<Source, Destination>()
.ForMember( dest => dest.OutputData,
input => input.MapFrom(i => new OutputData{Cars=i.Cars}));
このように、あなたはあなたの車を目的地に設定することができます。
Source
とOutputData
の間のマッピングを定義します。
Mapper.CreateMap<Source, OutputData>();
構成を更新してマップDestination.Output
とOutputData
。
Mapper.CreateMap<Source, Destination>().ForMember( dest => dest.Output, input =>
input.MapFrom(s=>Mapper.Map<Source, OutputData>(s)));
あなたはそのようにそれを行うことができます:
// 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));
それが私のやり方です;-)
この質問に関してallrameestによって与えられた正解は役立つはずです: AutoMapper-ディープレベルマッピング
これはあなたが必要とするものです:
Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.OutputData, opt => opt.MapFrom(i => i));
Mapper.CreateMap<Source, OutputData>()
.ForMember(dest => dest.Cars, opt => opt.MapFrom(i => i.Cars));
マッパーを使用する場合は、次を使用します。
var destinationObj = Mapper.Map<Source, Destination>(sourceObj)
ここで、destinationObjはDestinationのインスタンスであり、sourceObjはSourceのインスタンスです。
注:この時点でMapper.CreateMapの使用をやめるようにしてください。これは廃止されており、まもなくサポートされなくなります。
これは私のために働いた:
Mapper.CreateMap<Destination, Source>()
.ForMember(x => x.Cars, x => x.MapFrom(y => y.OutputData.Cars))
.ReverseMap();