我正在将一个非常深层嵌套的实体映射到一个扁平的Dto
对象,并想知道我如何使用AutoMapper优雅地处理它。我知道我可以对每个属性进行无效检查,因为它被映射,但是对于像以下这样的事情来说会非常难看:
ForMember(s => s.Property, o => o.MapFrom(s => s.Parent.Child1.Child2.Child3.Property)
所以我猜我可以使用各种地图配置到相同的目标对象......但是相对不熟练使用AutoMapper我不确定它的性能影响是什么。还有什么其他更好的方法可以实现我想要的目标?
要重新迭代,我希望避免这样的事情(我知道下面的代码可能不会编译......这只是一个例子)我有为每个成员做的事情:
ForMember(s => s.Property, o => o.MapFrom(
s => s.Parent == null ? string.Empty :
s => s.Parent.Child1 == null ? string.Empty :
s => s.Parent.Child1.Child2 == null ? string.Empty :
s => s.Parent.Child1.Child2.Child3 == null ? string.Empty :
s => s.Parent.Child1.Child2.Child3.Property));
答案 0 :(得分:6)
我认为AutoMapper会自动为您自动处理null
传播。你的例子:
ForMember(s => s.Property, o => o.MapFrom(s => s.Parent.Child1.Child2.Child3.Property)
如果任何中间成员是null
,则应解析为null
(我认为)。
答案 1 :(得分:0)
虽然这适用于单个实例,但它不适用于可查询集合的Projections。
我添加到安德鲁的答案中的这个附加代码失败了,即使在最新的5.1.1版本上也是如此。
var list = new List<Source>();
list.Add(new Source());
list.AsQueryable().ProjectTo<Dest>().Dump();