Automapper copy List to List
I have these classes:
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 ;}
}
I defined this:
Mapper.CreateMap<Person, PersonView>();
Mapper.CreateMap<PersonView, Person>()
.ForMember(person => person.Id, opt => opt.Ignore());
That's work for this:
PersonView personView = Mapper.Map<Person, PersonView>(new Person());
I'd like to make the same but for List<Person>
to List<PersonView>
but I don't find the right syntax.
Thanks
Solution 1:
Once you've created the map (which you've already done, you don't need to repeat for Lists), it's as easy as:
List<PersonView> personViews =
Mapper.Map<List<Person>, List<PersonView>>(people);
You can read more in the AutoMapper documentation for Lists and Arrays.
Solution 2:
For AutoMapper 6< it would be:
In StartUp:
Mapper.Initialize(cfg => {
cfg.CreateMap<Person, PersonView>();
...
});
Then use it like this:
List<PersonView> personViews = Mapper.Map<List<PersonView>>(people);
Solution 3:
You can also try like this:
var personViews = personsList.Select(x=>x.ToModel<PersonView>());
where
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);
}