如何使用自动映射器将客户数据从列表映射到客户类
本文关键字:映射 客户 数据 列表 何使用 | 更新日期: 2023-09-27 18:36:11
>我试图以以下方式将客户数据从列表映射到客户类,但没有得到正确的结果。 该程序不会给出任何错误,而是生成具有空值的客户数据。
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
解决上述问题。
就像我在这里说的,你不需要自动映射器。
这:
var oCustomer = oCust.Where(x => x.CountryCode == "US").ToList();
将填写客户列表。然后,您需要一个客户:
Customer viewModel = Mapper.Map<List<Customer>, Customer>(oCustomer);
AutoMapper可以做到这一点,但它没有意义。当有多个客户时,它应该选择哪个客户?
只需选择一个客户,然后返回:
Customer viewModel = oCustomer.FirstOrDefault();
如果您确实认为必须从列表映射到单个实体(同样,在这种情况下这毫无意义),请参阅使用 AutoMapper 从列表向下映射到对象。
如果你真的,真的必须使用AutoMapper将列表中的单个项目映射到单个项目,并且你不想在列表中使用FirstOrDefault()
,你可以做这样的事情(从投影拼凑在一起 - 自动映射器维基,如何使用自动映射器。ForMember?, Automapper - 它是否映射对象列表?
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()
。虽然我会警告你:当源列表为空时,此代码将引发异常,不容易维护,并且会导致其他问题,其中一些问题可以使用自定义值解析器修复。
,也不会支持您使用它后提出的问题。