2012-01-17 19 views
38

tengo estas clases:lista de copias AutoMapper a la lista

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

I definidos esto:

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

Eso es trabajo para esto:

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

me gustaría hacer la misma pero para List<Person> to List<PersonView> pero no encuentro la sintaxis correcta.

Gracias

Respuesta

70

Una vez creado el mapa (que ya lo has hecho, no es necesario repetir para listas), es tan fácil como:

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

Usted puede leer más en el AutoMapper documentation for Lists and Arrays.

+0

Lo que es interesante señalar aquí, es que la plantilla de origen puede ser el tipo más genérico, como 'PersonView [] 'y la salida puede ser de cualquier otro tipo admitido como' IEnumerable, ICollection, IList, etc. – Alex

2

También puede tratar de esta manera:

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

donde

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

Para AutoMapper 6 < sería:

En el arranque:

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

A continuación, utilice eso de esta manera:

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