我有以下映射:
Mapper.Initialize(cfg => cfg.CreateMap<StructureDTO, Structure>()
.ForMember(dest => dest.ParentId,
opt => opt.MapFrom(src => src.ParentStructureId != Guid.Empty ? src.ParentStructureId : (Guid?)null)))
dest.ParentId is nullable Guid
src.ParentStructureId is Guid
我得到以下异常:
'System.InvalidOperationException'
中出现System.Core.dll
类型的例外但未在用户代码中处理
其他信息:运算符'NotEqual'
的操作数与方法'op_Inequality'
的参数不匹配。
这是因为我试图映射两种不同的类型吗?我在这里不知所措。
Automapper版本为5.0.2
答案 0 :(得分:1)
制作一个为您完成工作的方法,然后使用ForMember
方法中的方法:
private Guid? Transform(StructureDTO src) {
return src.ParentStructureId != Guid.Empty ? src.ParentStructureId : (Guid?) null;
}
然后以这种方式进行映射:
Mapper.Initialize(cfg => cfg.CreateMap<StructureDTO, Structure>()
.ForMember(dest => dest.ParentId,
opt => opt.MapFrom(src => Transform(src))));
这是AutoMapper的表达式构建逻辑的一个错误,它试图将你的lambda转换为.NET expression tree
,绕过它我们将它作为MethodCallExpression
。这会直接调用您的新方法,而不会将其转换为表达式。