私にはクラスがあります:
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の使用方法
まず、使用するソースと宛先の両方のタイプが必要です。宛先タイプの設計は、それが存在するレイヤーの影響を受ける可能性がありますが、AutoMapperは、メンバーの名前がソースタイプのメンバーと一致する限り最適に機能します。 「FirstName」という名前のソースメンバーがある場合、これは「FirstName」という名前の宛先メンバーに自動的にマップされます。 AutoMapperは平坦化もサポートしています。これにより、途中で発生する可能性のある厄介なnull参照例外をすべて取り除くことができます。
タイプとAutoMapperへの参照を取得したら、2つのタイプのマップを作成できます。
Mapper.CreateMap<Order, OrderDto>();
左側のタイプはソースタイプであり、右側のタイプは宛先タイプです。マッピングを実行するには、Mapメソッドを使用します。
OrderDto dto = Mapper.Map<Order, OrderDto>(order);
別の解決策
List<Person> people = new List<Person>();
List<PersonViewModel> peopelVM;
peopelVM = people.Select(Mapper.Map<Person, PersonViewModel>);
Automapper configで
Mapper.CreateMap<Person, PersonViewModel>();
ここでIQueryableリストを使用している場合(たとえば、EFやNHから)、AutoMapper.IQueryableExtensionsメソッドのProject()およびTo()を使用できます。
AutoMapperを使用するのはこれが初めてですが、モデルのみのマップを作成することで成功しています。
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>();
コア1.1では、この拡張機能が機能する可能性があります。
public static List<TDestination> MapList<TSource, TDestination>(this IMapper mapper, List<TSource> source)
{
return source.Select(x => mapper.Map<TDestination>(x)).ToList();
}
個々のアイテムの既存のマッピングを使用して、次のような処理を行う拡張メソッドを作成できます。
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);
public IActionResault Index(List<User> users)
{
List<VM_User> vM_users=new List<VM_User>();
vM_users=mapper.Map(users,vM_users);
return view(vM_users);
}