web-dev-qa-db-ja.com

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>しかし、正しい構文が見つかりません。

ありがとう

44
Kris-I

マップを作成したら(既に完了しているため、リストで繰り返す必要はありません)、次のように簡単です。

List<PersonView> personViews = 
    Mapper.Map<List<Person>, List<PersonView>>(people);

詳細については、 リストと配列のAutoMapperドキュメント を参照してください。

90
Justin Niessner

AutoMapper 6 <の場合:

スタートアップで:

Mapper.Initialize(cfg => {
    cfg.CreateMap<Person, PersonView>();
    ...
});

次に、次のように使用します。

List<PersonView> personViews = Mapper.Map<List<PersonView>>(people);
8
Ogglas

次のように試すこともできます:

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
Antonio Correia