AutoMapper - сопоставление плоского объекта со сложным объектом - PullRequest
1 голос
/ 07 августа 2020

Как я могу сопоставить список плоских объектов с дочерними полями в одном объекте, группируя по полю (например, поле идентификатора источника) с помощью AutoMapper с C#?

Я пробовал использовать ITypeConverter из документации AutoMapper, но все еще не работает.

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 Ответ

0 голосов
/ 08 августа 2020

Используйте ReverseMap(), а затем укажите настраиваемое сопоставление от первого дочернего к дочернему списку.

Подробнее о сглаживании см. В документации .

CreateMap<Destination, FlatSource>()
    .ReverseMap()
    .ForPath(d => d.Childrens, o => o.MapFrom(s => new List<FirstChild>
    {
        new FirstChild
        {
            Id = s.FirstChildId,
            Name = s.FirstChildName,
        },
    }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...