使用Automapper映射列表

我有class:

public class Person{ /* Props here */ } public class PersonViewModel { /* Props here */ } 

然后列表:

 List<Person> people = new List<Person>(); List<PersonViewModel> peopleVM = Mapper .MapList<Person, PersonViewModel>(people); //Problem here. 

什么是正确的方法来做到这一点?

 Mapper.CreateMap<Person, PersonViewModel>(); peopleVM = Mapper.Map<List<Person>, List<PersonViewModel>>(people); Mapper.AssertConfigurationIsValid(); 

从入门

我如何使用AutoMapper? 首先,您需要使用源types和目标types。 目标types的devise可能受其所在图层的影响,但只要成员的名称与源types的成员相匹配,AutoMapper就能发挥最佳效果。 如果您有一个名为“FirstName”的源成员,则会自动将其映射到名为“FirstName”的目标成员。 AutoMapper还支持拼合,可以摆脱所有可能遇到的麻烦的空引用exception。

一旦你有了你的types和对AutoMapper的引用,你可以为这两种types创build一个映射。

 Mapper.CreateMap<Order, OrderDto>(); 

左边的types是源types,右边的types是目标types。 要执行映射,请使用Map方法。

 OrderDto dto = Mapper.Map<Order, OrderDto>(order); 

如果您在此处使用IQueryable列表(例如,来自EF或NH),则可以使用AutoMapper.IQueryableExtensions方法Project()和To()。

这是我第一次使用AutoMapper,但是我只是通过为模型创build一个地图来成功:

 Mapper.CreateMap<Person, PersonViewModel>(); Mapper.AssertConfigurationIsValid(); 

然后使用IQueryableExtension方法Project()和To():

 using AutoMapper.QueryableExtensions; ... IQueryable<Person> people = new List<Person>().AsQueryable(); //actually from ORM IQueryable<PersonViewModel> peopleVM = people.Project().To<PersonViewModel>(); 

另一个scheme

 List<Person> people = new List<Person>(); List<PersonViewModel> peopelVM; peopelVM = people.Select(Mapper.Map<Person, PersonViewModel>); 

并在Automapperconfiguration

 Mapper.CreateMap<Person, PersonViewModel>(); 

你可以创build一个扩展方法,使用现有的单个项目映射来做这样的事情:

 public static class AutoMapperExtensions { public static List<TDestination> MapList<TSource, TDestination>(this IMapper mapper, List<TSource> source) { return mapper.Map<List<TDestination>>(source); } } 

用法:

 List<PersonViewModel> peopleVM = _mapper.MapList<PersonViewModel>(people);