Значение Automap для Key in Ienumerable <T>to flat string [] - PullRequest
0 голосов
/ 16 февраля 2019

Я получаю данные от вызова API, которые мне нужно сгладить.Данные хранятся в Ienumerable внутри другого объекта.Ниже приведен пример моего входящего формата данных.

class Incoming 
{
   public string Something { get; set; }
   public string SomethingElse { get; set; }
   public IEnumerable<Service> Service1 { get; set; }
   public IEnumerable<Service> Service2 { get; set; }
}
class Service
{
   public string One { get; set; }
   public string Two { get; set; }
   public string ServiceName { get; set}
}

Мне нужно сопоставить serviceNames со строкой [] в другом объекте.

class outgoing
{
   public string Something { get; set; }
   public string SomethingElse { get; set; }
   public string[] Service1 { get; set; }
   public string[] Service2 { get; set }
}

Так что, если мои входящиеService1 данных имеет значение

{ 
Something: "A", 
SomethingElse "B", 
Service1: [
{ One: one, Two: two, ServiceName: "NameOne" },
{ One: one, Two: two, ServiceName: "NameTwo" },
{ One: one, Two: two, ServiceName: "NameThree" } 
]

Мне бы хотелось, чтобы ответ выглядел следующим образом:

Something: "A",
SomethingElse: "B",
Service1: {"NameOne", "NameTwo", "NameThree"}

Я пытался использовать Construct Используя

.ConstructUsing(
   x => new string[] { x.ServiceName}
);

But the results show an array of types rather then values
  "Service1": [
     "Service",
     "Service",
     "Service"
  ]


1 Ответ

0 голосов
/ 16 февраля 2019

Попробуйте использовать .MapFrom() следующим образом:

 CreateMap<Incoming, outgoing>()
            .ForMember(dest => dest.Service1,
                        opt => opt.MapFrom(
                               src => src.Service1.Select(
                                             service => service.ServiceName)
                        )
            );

БОНУС (отвечая на вопрос из комментария, не уверен, сработает ли он):

CreateMap<IEnumerable<StService>, string[]>()
                .ForMember(dest => dest,
                           opt => opt.MapFrom(src => src.Select(service => service.ServiceName)));
...