使用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);