如何使用自动映射器将多个列表 <property> 映射到视图模型
How to map several list<property> to view model using 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 中配置映射?
这看起来是一个非常奇怪的解决方案,最后两行覆盖了同一个变量。我建议您将控制器中的最后两行替换为
GenerateCodeVM generateCodeVM = new GenerateCodeVM();
generateCodeVM.Animal = Mapper.Map<List<AnimalVM>>(animal);
generateCodeVM.Region = Mapper.Map<List<RegionVM>>(region);
第一位没问题
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>();
那么就可以使用AutoMapper
中的project
扩展方法了。 只要 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);
您根本不需要更改 CreateMap
来支持它,开箱即用。
我会将你引用列表的变量名复数化,这样你和其他人都可以更清楚地看到你的代码(例如 us/me on SO)。
List<Region> region = regionRepository.GetAll().ToList();
应该是
List<Region> regions = regionRepository.GetAll().ToList();
我想知道如何将列表映射到包含相同列表的对象 属性
我有一个如下所示的视图模型:
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 中配置映射?
这看起来是一个非常奇怪的解决方案,最后两行覆盖了同一个变量。我建议您将控制器中的最后两行替换为
GenerateCodeVM generateCodeVM = new GenerateCodeVM();
generateCodeVM.Animal = Mapper.Map<List<AnimalVM>>(animal);
generateCodeVM.Region = Mapper.Map<List<RegionVM>>(region);
第一位没问题
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>();
那么就可以使用AutoMapper
中的project
扩展方法了。 只要 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);
您根本不需要更改 CreateMap
来支持它,开箱即用。
我会将你引用列表的变量名复数化,这样你和其他人都可以更清楚地看到你的代码(例如 us/me on SO)。
List<Region> region = regionRepository.GetAll().ToList();
应该是
List<Region> regions = regionRepository.GetAll().ToList();