Список экземпляров Automapper для списка
У меня есть следующие классы:
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>
, но я не нашел правильный синтаксис.
Спасибо
Ответы
Ответ 1
Как только вы создали карту (которую вы уже сделали, вам не нужно повторять для списков), это так же просто, как:
List<PersonView> personViews =
Mapper.Map<List<Person>, List<PersonView>>(people);
Вы можете прочитать больше в документации AutoMapper для списков и массивов.
Ответ 2
Вы также можете попробовать следующее:
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);
}
Ответ 3
Для AutoMapper 6 < это будет:
В StartUp:
Mapper.Initialize(cfg => {
cfg.CreateMap<Person, PersonView>();
...
});
Затем используйте его следующим образом:
List<PersonView> personViews = Mapper.Map<List<PersonView>>(people);