自动映射器 - 将扁平对象映射到复杂对象

4

如何使用C#中的AutoMapper将一个带有子字段的扁平对象列表映射到单个对象,并按字段(如源ID字段)分组?

我尝试使用AutoMapper文档中的ITypeConverter,但仍然不起作用。

public class FlatSource
   {
       public int Id { get; set; }

       public string Name { get; set; }
 
       public int FirstChildId { get; set; }

       public string FirstChildName { get; set; }
 
       public int SecondChildId { get; set; }
 
       public string SecondChildName { get; set; }        
   }
 
 
   public class Destination {
       
       public int Id { get; set; }

       public string Name { get; set; }

       public List<FirstChild> Childrens { get; set; }

       public SecondChild SecondChild { get; set; }
   }
 
   public class FirstChild {
       
       public int Id { get; set; }

       public string Name { get; set; }
   }
 
   public class SecondChild {
       
       public int Id { get; set; }

       public string Name { get; set; }
   }

考虑一个FlatSource对象的列表:
FlatSourceArray:[
{Id: 1, Name: "Bob", FirstChildId: 1, FiirstChildName: "John", SecondChildId: 10, SecondChildName: "Pilot" },
{Id: 1, Name: "Bob", FirstChildId: 2, FiirstChildName: "Maxi", SecondChildId: 10, SecondChildName: "Pilot" }, 
{Id: 1, Name: "Bob", FirstChildId: 3, FiirstChildName: "Mary", SecondChildId: 10, SecondChildName: "Pilot" }
]

所以,我希望将其转换为单一对象,例如:
Destination:{

  Id: 1,
  Name:"Bob",
  Childrens": [
  {Id:1, Name: "John"},
  {Id:2, Name: "Max"},
  {Id:3, Name: "Mary"}
 ],
 SecondChild: {Id:10, Name: "Pilot"}

}

1
你能否提供一个源代码的例子以及你期望得到的输出结果? - devNull
@devNull 我已经包含了源列表和最终对象的示例。 - Weberth Fernandes
1个回答

3

使用ReverseMap(),并指定从第一个子元素到子元素列表的自定义映射。

了解有关反扁平化的更多信息,请阅读文档

CreateMap<Destination, FlatSource>()
    .ReverseMap()
    .ForPath(d => d.Childrens, o => o.MapFrom(s => new List<FirstChild>
    {
        new FirstChild
        {
            Id = s.FirstChildId,
            Name = s.FirstChildName,
        },
    }));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接