2012-01-17 22 views
38

ho queste classi:Automapper Lista copia to List

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 ;} 
} 

ho definito questo:

Mapper.CreateMap<Person, PersonView>(); 
Mapper.CreateMap<PersonView, Person>() 
    .ForMember(person => person.Id, opt => opt.Ignore()); 

Questo è il lavoro per questo:

PersonView personView = Mapper.Map<Person, PersonView>(new Person()); 

mi piacerebbe fare lo stesso ma per List<Person> to List<PersonView> ma non trovo la sintassi corretta.

Grazie

risposta

70

Una volta creata la mappa (che hai già fatto, non è necessario ripetere per liste), è facile come:

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

Potete leggere altro nel AutoMapper documentation for Lists and Arrays.

+0

La cosa interessante da notare qui, è che il modello di origine può essere il tipo più generica, come 'PersonView []' e l'uscita può essere di qualsiasi altro tipo supportato, ad esempio 'IEnumerable, ICollection, IList, ecc – Alex

2

Si può anche provare in questo modo:

var personViews = personsList.Select(x=>x.ToModel<PersonView>()); 

dove

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

Per automapper 6 < sarebbe:

In StartUp:

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

Quindi utilizzare esso in questo modo:

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