Automapper копировать список в список - PullRequest
42 голосов
/ 17 января 2012

У меня есть эти классы:

public class Person {
    public int Id{ get; set ;}
    public string FirstName{ get; set ;}
    public string LastName{ get; set ;}
}

public class PersonView {
    public int Id{ get; set ;}
    public string FirstName{ get; set ;}
    public string LastName{ get; set ;}
}

Я определил это:

Mapper.CreateMap<Person, PersonView>();
Mapper.CreateMap<PersonView, Person>()
    .ForMember(person => person.Id, opt => opt.Ignore());

Это работа для этого:

PersonView personView = Mapper.Map<Person, PersonView>(new Person());

Я хотел бы сделатьто же самое, но для List<Person> to List<PersonView>, но я не нахожу правильный синтаксис.

Спасибо

Ответы [ 3 ]

86 голосов
/ 17 января 2012

После того, как вы создали карту (которую вы уже сделали, вам не нужно повторять списки), это так просто, как:

List<PersonView> personViews = 
    Mapper.Map<List<Person>, List<PersonView>>(people);

Вы можете прочитать больше в Документация AutoMapper для списков и массивов .

7 голосов
/ 19 мая 2017

Для AutoMapper 6 <это будет: </p>

При запуске:

Mapper.Initialize(cfg => {
    cfg.CreateMap<Person, PersonView>();
    ...
});

Затем используйте его так:

List<PersonView> personViews = Mapper.Map<List<PersonView>>(people);
3 голосов
/ 15 апреля 2016

Вы также можете попробовать вот так:

var personViews = personsList.Select(x=>x.ToModel<PersonView>());

где

 public static T ToModel<T>(this Person entity)
 {
      Type typeParameterType = typeof(T);

      if(typeParameterType == typeof(PersonView))
      {
          Mapper.CreateMap<Person, PersonView>();
          return Mapper.Map<T>(entity);
      }

      return default(T);
 }
...