如何使用automapper将多个列表<property>映射到视图模型

时间:2015-08-18 06:58:41

标签: c# asp.net-mvc automapper

我试图弄清楚如何将列表映射到包含相同列表属性的对象

我有一个看起来像这样的视图模型:

public class GenerateCodeVM
{
    public List<AnimalVM> Animal { get; set; }

    public List<RegionVM> Region { get; set; }
}

public class AnimalVM
{
    public int? AnimalID { get; set; }

    public string Name { get; set; }

    public string Code { get; set; }

    public DateTime? LastUpdated { get; set; }
}

public class RegionVM
{
    public int? RegionID { get; set; }

    public string RegionName { get; set; }

    public string Code { get; set; }
}

在控制器中我有:

GenerateCodeVM generateCodeVM = new GenerateCodeVM();
AnimalRepository animalRepository = new AnimalRepository();
List<Animal> animal = animalRepository.GetAll().ToList();
RegionRepository regionRepository = new RegionRepository();
List<Region> region = regionRepository.GetAll().ToList();

generateCodeVM = Mapper.Map<List<Region>, GenerateCodeVM> (region);
generateCodeVM = Mapper.Map<List<Animal>, GenerateCodeVM>(animal);

如何在automapper中配置映射?

2 个答案:

答案 0 :(得分:1)

这第一位很好

query2.getFirstInBackground(new GetCallback<ParseObject>() {
    @Override
    public void done(ParseObject parseObject, ParseException e) {
        if (parseObject == null) {
           //null means number is not registered
          // next step must be here if number not register dont return any value



        } else {
           //number is registerd so print toast here
        }
    }
});

这些线旁边没有。

GenerateCodeVM generateCodeVM = new GenerateCodeVM();
AnimalRepository animalRepository = new AnimalRepository();
List<Animal> animal = animalRepository.GetAll().ToList();
RegionRepository regionRepository = new RegionRepository();
List<Region> region = regionRepository.GetAll().ToList();

我只会映射到generateCodeVM = Mapper.Map<List<Region>, GenerateCodeVM> (region); generateCodeVM = Mapper.Map<List<Animal>, GenerateCodeVM>(animal); 对象而不是整个事物。

所以你需要设置映射。

generateCodeVM

然后,您可以使用Mapper.CreateMap<Region, RegionVM>(); Mapper.CreateMap<Animal, AnimalVM>(); 中的project扩展方法。 只要AutoMapper返回GetAll()

IQueryable<>

然后将这些投影列表分配到GenerateCodeVM generateCodeVM = new GenerateCodeVM(); AnimalRepository animalRepository = new AnimalRepository(); RegionRepository regionRepository = new RegionRepository(); List<Animal> animal = animalRepository.GetAll().Project().To<AnimalVM>().ToList(); List<Region> region = regionRepository.GetAll().Project().To<RegionVM>.ToList();

generateCodeVM

提示和提示

如果您不想使用generateCodeVM.Animal = animal; generateCodeVM.Region = region; ,可以这么做:

Project

您根本不需要更改List<Region> region = regionRepository.GetAll().ToList(); var mappedRegions = Mapper.Map<List<RegionVM>>(region); 来支持此功能,它支持开箱即用。

我会复制你的变量名称,这些变量名称引用了列表,这样就可以让你和其他任何人看到你的代码更清晰(例如我们/我在SO上)。

CreateMap

应该是

List<Region> region = regionRepository.GetAll().ToList();

答案 1 :(得分:0)

这看起来像一个非常奇怪的解决方案,最后两行覆盖同一个变量。我建议你用

替换控制器中的最后两行
GenerateCodeVM generateCodeVM = new GenerateCodeVM();
generateCodeVM.Animal = Mapper.Map<List<AnimalVM>>(animal);
generateCodeVM.Region = Mapper.Map<List<RegionVM>>(region);