用Automapper从源对象映射到单个对象集合

本文关键字:对象 单个 集合 映射 Automapper | 更新日期: 2023-09-27 18:01:26

我有一个客户对象,其中包含地址,我想将其映射到具有单个地址视图模型的客户视图模型。我想要映射到视图模型的集合中的地址由地址中的特定值选择。即,当类型Id == 1

我的Automapper配置是:

 cfg.CreateMap<Customer, CustomerVM>()
        .ForMember(dest => dest.Address, opt => opt.MapFrom(src => src.Type.Id== 2).FirstOrDefault())
        .ReverseMap();   
 cfg.CreateMap<Address, AddressVM>()            
        .ForMember(dest => dest.Street,opt=>opt.MapFrom(src=>src.Street1))
        .ForMember(dest => dest.State,opt=>opt.MapFrom(src=>src.Region))
        .ForMember(dest => dest.Postal, opt => opt.MapFrom(src => src.PostalCode))
  public class Customer{
        public virtual ICollection<Address> Addresses{get; set;}
        }
  public class CustomerVM{
       public AddressVM Address{get; set;}
       }

这是映射,但地址是null。是否有一种方法可以从集合中选择一个特定的对象并将其映射到单个对象

用Automapper从源对象映射到单个对象集合

这对我很有用。

cfg.CreateMap<Customer, CustomerVM>()
.ForMember(dest => dest.Address, address => address
.MapFrom(src => src.Addresses.FirstOrDefault(add => add.Type.Id == 2)));

很好,如果没有地址,它不会抛出或映射。Type == 2