我试图通过以下方式将客户数据从List映射到Customer类,但没有得到正确的结果。程序没有给出任何错误,但生成的客户数据为空值。
using AutoMapper;
List<Customer> oCust = new List<Customer>();
oCust.Add(new Customer { Name = "Rajan", Salary = 200, CountryCode = "GB" });
oCust.Add(new Customer { Name = "Ari", Salary = 200, CountryCode = "US" });
oCust.Add(new Customer { Name = "Dib", Salary = 200, CountryCode = "CA" });
var oCustomer = oCust.Where(x => x.CountryCode == "US").ToList(); ;
Mapper.CreateMap<List<Customer>, Customer>();
Customer viewModel = Mapper.Map<List<Customer>, Customer>(oCustomer);
我在Automapper from this url http://www.codearsenal.net/2012/12/csharp-object-to-object-mapping-automapper.html#.VKqYbckpp68
只需使用Automapper
指导我如何解决上述问题。
答案 0 :(得分:2)
就像我说here一样,你不需要AutoMapper。
此:
var oCustomer = oCust.Where(x => x.CountryCode == "US").ToList();
将填写客户列表。那么你想要一个客户:
Customer viewModel = Mapper.Map<List<Customer>, Customer>(oCustomer);
AutoMapper 可以这样做,但没有任何意义。当有多个客户应该选择哪个客户?
只需选择一个客户,然后返回:
Customer viewModel = oCustomer.FirstOrDefault();
如果您确实认为必须从列表映射到单个实体(再次,在这种情况下没有意义),请参阅Mapping from list down to object with AutoMapper。
如果你真的,真的必须使用AutoMapper将列表中的单个项目映射到单个项目而你不想在列表中使用FirstOrDefault()
,你可以这样做(拼凑在一起) Projection - AutoMapper Wiki,How to use AutoMapper .ForMember?,Automapper - Does it map lists of objects?):
Mapper.CreateMap<List<Customer>, Customer>()
.ForMember(t => t.Name,
opt => opt.MapFrom(s => s.FirstOrDefault().Name))
.ForMember(t => t.Salary,
opt => opt.MapFrom(s => s.FirstOrDefault().Salary))
.ForMember(t => t.CountryCode,
opt => opt.MapFrom(s => s.FirstOrDefault().CountryCode));
var oCustomer = oCust.Where(x => x.CountryCode == "US").ToList(); ;
Customer viewModel = Mapper.Map<List<Customer>, Customer>(oCustomer);
请注意,这仍然使用.FirstOrDefault()
。虽然我会警告你:当源列表为空,不易维护并导致其他问题时,此代码将抛出异常,其中一些问题可以使用自定义值解析器修复。
我不会对您使用它负责,并且不会支持您使用它后的问题。