85 votes

Mappage de listes à l'aide d'Automapper

J'ai les cours :

 public class Person{ /* Props here */ }

public class PersonViewModel { /* Props here */ }

Puis la liste :

 List<Person> people = new List<Person>();
List<PersonViewModel> peopleVM = Mapper
                                .MapList<Person, PersonViewModel>(people); //Problem here.

Quelle est la bonne façon de procéder ?

27voto

user193061 Points 71

Une autre solution

 List<Person> people = new List<Person>();
List<PersonViewModel> peopelVM;
peopelVM = people.Select(Mapper.Map<Person, PersonViewModel>);

Et dans la config Automapper

 Mapper.CreateMap<Person, PersonViewModel>();

15voto

Jerph Points 2401

Si vous utilisez des IQueryable ici (de EF ou NH, par exemple), vous pouvez utiliser les méthodes AutoMapper.IQueryableExtensions , Project() et To() .

C'est la première fois que j'utilise AutoMapper, mais j'y parviens en créant une carte uniquement pour le modèle :

 Mapper.CreateMap<Person, PersonViewModel>();
Mapper.AssertConfigurationIsValid();

Et puis en utilisant le IQueryableExtension méthodes Project() et To() :

 using AutoMapper.QueryableExtensions;
...

IQueryable<Person> people = new List<Person>().AsQueryable(); //actually from ORM
IQueryable<PersonViewModel> peopleVM = people.Project().To<PersonViewModel>();

3voto

ruudj Points 21

Dans le noyau 1.1, cette extension peut fonctionner :

 public static List<TDestination> MapList<TSource, TDestination>(this IMapper mapper, List<TSource> source)
        {
            return source.Select(x => mapper.Map<TDestination>(x)).ToList();
        }

0voto

garryp Points 4185

Vous pouvez créer une méthode d'extension pour faire quelque chose comme ceci en utilisant des mappages existants pour des éléments individuels :

 public static class AutoMapperExtensions
{
    public static List<TDestination> MapList<TSource, TDestination>(this IMapper mapper, List<TSource> source)
    {
        return mapper.Map<List<TDestination>>(source);
    }
}

Usage:

 List<PersonViewModel> peopleVM = _mapper.MapList<PersonViewModel>(people);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X