如何使用自动映射器将客户数据从列表映射到客户类

本文关键字:映射 客户 数据 列表 何使用 | 更新日期: 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()。虽然我会警告你:当源列表为空时,此代码将引发异常,不容易维护,并且会导致其他问题,其中一些问题可以使用自定义值解析器修复。

我不会对您使用它负责

,也不会支持您使用它后提出的问题。