Сглаживание классов 1-ко-многим в автомате - PullRequest
1 голос
/ 17 марта 2011

У меня есть объект источника и назначения, например:

Source:
public class Team{
  public string TeamName{get; set;}
  public string List<Person> {get; set;}
}

public class Person{
  public string FullName {get; set;}
}

Destination:
public class MyDTOClass{
  public string TeamName;
  public string PersonName;
}

Я в основном хочу сгладить отношение «один ко многим», продублировав свойство «Имя», так что результат будет:

   MyDtoClass.TeamName= "X";
   MyDtoClass.PersonName= "Y";

   MyDtoClass.TeamName= "X";
   MyDtoClass.PersonName= "Z"; 

Есть ли способ сделать это с помощью автомпера?

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Я не думаю, что AutoMapper может автоматически переходить от одной команды к массиву / коллекции MyDTOObjects.Тем не менее, с LINQ должно быть довольно легко делать то, что вы хотите:

var flattened = from p in team.Persons
                select new MyDTOClass { TeamName = team.Name, PersonName = p.FullName}
0 голосов
/ 15 января 2013

Я только начал использовать Automapper, но вот решение, с которым я смог прийти:

Func<Team[], IEnumerable<MyDTOClass>> getPersonsFromTeams = (teams) => new IEnumerable<MyDTOClass>
{
    teams.SelectMany(s => s.Persons, (t, person) => new MyDTOClass(team.TeamName, person))
};

mapper.CreateMap<Company, CompanyDTOs>()
    .ForMember(d => d.Persons, o => o.ResolveUsing(s => s.getPersonsFromTeams(s.Teams)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...