成员条件自动映射

时间:2017-09-28 09:46:07

标签: c# automapper-6

我正在使用自动映射器6.1并且我想将一些值从一个对象映射到另一个对象,但是有一个条件是这些值不能为空并且不应该映射所有对象属性,如果这样我可以轻松使用ForAllMembers条件。我想做的是:

   config.CreateMap<ClassA, ClassB>()
     .ForMember(x => x.Branch, opt => opt.Condition(src => src.Branch != null), 
        cd => cd.MapFrom(map => map.Branch ?? x.Branch))

也试过

 config.CreateMap<ClassA, ClassB>().ForMember(x => x.Branch, cd => {
   cd.Condition(map => map.Branch != null);
   cd.MapFrom(map => map.Branch);
 })

换句话说,对于我在自动映射器配置中定义的每个属性,我想检查它是否为null,如果为null,则从x中保留值。

调用此类自动映射器配置如下所示:

 ClassA platform = Mapper.Map<ClassA>(classB);

2 个答案:

答案 0 :(得分:0)

如果我理解正确,可能比你想象的要简单。 28th Sept, 2017不是必需的,因为条件已经在function numbersOutput(numbers) { var num = numbers.split(','); //for(var i=0; i<num.length; i++) { //num[i] = parseInt(num[i], 0); //} var max = Math.max(num); console.log(max); } numbersOutput("1 2 3 4 5");中处理。

我认为以下内容应达到您想要的效果:如果不是opt.Condition,它会映射MapFrom。如果Branch(来自来源)为null,则会将目的地设置为Branch

null

如果您需要使用x中的其他属性而不是string.Empty,那么您可以写:

config.CreateMap<ClassA, Class>()
    .ForMember(x => x.Branch, cd => cd.MapFrom(map => map.Branch ?? string.Empty));

如果要实现复杂逻辑但保持映射整洁,可以将逻辑提取到单独的方法中。例如:

string.Empty

答案 1 :(得分:0)

您不需要MapFrom,但您需要一个PreCondition。请参阅here