代码之家  ›  专栏  ›  技术社区  ›  Castrohenge

自动映射:忽略条件

  •  31
  • Castrohenge  · 技术社区  · 15 年前

    public class Car
    {
        public int Id { get; set; }
        public string Code { get; set; }
    }
    
    public class CarViewModel
    {
        public int Id { get; set; }
        public string Code { get; set; }
    }
    

    我在找这样的东西

    Mapper.CreateMap<CarViewModel, Car>()
          .ForMember(dest => dest.Code, 
          opt => opt.Ignore().If(source => source.Id == 0))
    

    2 回复  |  直到 6 年前
        1
  •  52
  •   Russ Van Bert Jimmy Bogard    5 年前

    Ignore()特性严格适用于从不映射的成员,因为在配置验证中也会跳过这些成员。我检查了几个选项,但看起来像自定义值解析程序这样的东西不会起作用。

    使用 Condition() 条件为真时映射成员的功能:

    Mapper.CreateMap<CarViewModel, Car>()
     .ForMember(dest => dest.Code, opt => opt.Condition(source => source.Id != 0))
    
        2
  •  6
  •   jbehren    14 年前

    dest.Code 如果为null,则作为起点可能会有所帮助:

    AutoMapper.Mapper.CreateMap().ForMember(dest => dest.Code,config => config.MapFrom(source => source.Id != 0 ? null : source.Code));

        3
  •  0
  •   lisandro101    6 年前

    以下是条件映射的文档: http://docs.automapper.org/en/latest/Conditional-mapping.html

    Mapper.PreCondition<CarViewModel, Car>()
     .ForMember(dest => dest.Code, opt => opt.Condition(source => source.Id == 0))