如何使用带有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"}
}
答案 0 :(得分:0)
使用ReverseMap()
,然后指定从第一个孩子到孩子列表的自定义映射。
在documentation中了解有关展平的更多信息。
CreateMap<Destination, FlatSource>()
.ReverseMap()
.ForPath(d => d.Childrens, o => o.MapFrom(s => new List<FirstChild>
{
new FirstChild
{
Id = s.FirstChildId,
Name = s.FirstChildName,
},
}));