条件上的Automapper成员映射似乎很复杂
本文关键字:很复杂 映射 成员 Automapper 条件 | 更新日期: 2023-09-27 18:08:53
我正试图找到正确的方法来实现这一点。
return isOptionTrue? Mapper.Map<Context>(myObject) : Mapper.Map<ReplayContext>(myObject);
Context有我实际需要的所有字段。
public class ContextReplay: Context
{
//This class is a work around to trick Automapper
}
当然映射
Mapper.CreateMap<myObject, Context>()
.ForMember(x => x.Id, opt => opt.MapFrom(y => y.Id))
.ForMember(x => x.Name, opt => opt.MapFrom(y => y.Name));
.ForMember(x => x.Important, opt => opt.MapFrom(y => y.NormalProp));
Mapper.CreateMap<myObject, ContextReplay>()
.ForMember(x => x.WellId, opt => opt.MapFrom(y => y.Id))
.ForMember(x => x.Name, opt => opt.MapFrom(y => y.Name));
.ForMember(x => x.Important, opt => opt.MapFrom(y => y.ReplayProp));
如你所见,我真的想要:
Mapper.CreateMap<myObject, Context>()
.ForMember(x => x.WellId, opt => opt.MapFrom(y => y.Id))
.ForMember(x => x.Name, opt => opt.MapFrom(y => y.Name));
.ForMember(x => x.Important, opt => opt.MapFrom(y => isOptionTrue? y.NormProp: y.ReplayProp));
对于问题:是的,我有一个空子类,因为我有两个唯一的MyObject到上下文映射。这整件事看起来就像一个超级黑鬼。我无法想象他们真的不支持这样的事情,但我很困惑。我不知道如何让我的bool与它一起传递
也许我的想象力有限,但我个人认为"自动映射"的用途有限,除非在两个"相同"的类之间进行映射。维护下面的代码不是更直接、更快、更容易吗?
var context = new Context {
WellId = myObject.Id,
Name = myObject.Name,
Important = (isOptionTrue ? myObject.NormProp : myObject.ReplayProp)
};