我试图弄清楚如何将列表映射到包含相同列表属性的对象
我有一个看起来像这样的视图模型:
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中配置映射?
答案 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);