我问过类似的问题here并发现了另一个类似的here.
我认为@PatrickSteele 提出了一个非常好的观点:AutoMapper 应该如何将源列表映射到目标列表现有对象的,当目标列表不一定与源列表有任何相似之处时? IE。 ”但是如果一个列表有 3 个而另一个列表有 5 个怎么办?"
If你确定FirstClass
and SecondClass
有相同数量的Children
, and if the FirstClass
的第 N 个孩子总是对应于SecondClass
的第 N 个孩子,你可以尝试这样的事情:
Mapper.CreateMap<FirstClass, SecondClass>()
.ForMember(m => m.Children, o => o.Ignore())
.AfterMap((src, dest) =>
{
for (var i = 0; i < dest.Children.Count; i++)
Mapper.Map(src.Children[i], dest.Children[i]);
});
or if FirstChildProp
是某种唯一的密钥:
Mapper.CreateMap<FirstClass, SecondClass>()
.ForMember(m => m.Children, o => o.Ignore())
.AfterMap((src, dest) =>
{
foreach (var dChild in dest.Children)
{
var sChild = src.Children.Single(c => c.FirstChildProp == dChild.FirstChildProp);
Mapper.Map(sChild, dChild);
}
});