Коллекция AutoMapper отображает коллекцию вложенных объектов - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь сопоставить объект со свойством коллекции другому объекту с вложенным классом, содержащим сопоставленные версии исходных коллекций, но я не могу определить, какое требуется соответствующее сопоставление.

Нижемой класс и попытки сопоставления.

public class TypeA
{
    public int Id;
    public string Description;
}

public class TypeB
{
    public int Id;
    public int Code;
}

public class Source
{
    public ICollection<TypeA> A;
    public ICollection<TypeB> B;
}

public class Destination
{
    public DestinationInner Inner;
}

public class DestinationInner
{
    public ICollection<int> A;
    public ICollection<int> B;
}

У меня определены следующие сопоставления, которые отлично работают, когда целевая коллекция находится на родительском уровне, а не в классе DestinationInner.

Mapper.CreateMap<TypeA, int>()
          .ConvertUsing(a => a.Id);

Mapper.CreateMap<TypeB, int>()
          .ConvertUsing(b => b.Id);

Я пытался добавитькарта, например, но я не могу найти способ принудительного отображения здесь коллекций

Mapper.CreateMap<Source, Destination>()
          .ForMember(d => d.Inner,
                     opt.MapFrom(s => new DestinationInner()
                                      {
                                          // not sure if I can assign anything here
                                          A = 
                                          B = 
                                      }));

Является ли MapFrom подходящим методом для использования здесь - или я подхожу к этому с неправильного направления?

Альтернативой является не использовать AutoMapper для коллекций и просто использовать Linq, но я думаю, что должен быть способ полностью использовать AutoMapper:

Mapper.CreateMap<Source, Destination>()
          .ForMember(d => d.Inner,
                     opt.MapFrom(s => new DestinationInner()
                                      {
                                          A = s.A.Select(a => a.Id).ToList(),
                                          B = s.B.Select(b => b.Id).ToList(),
                                      }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...