我正在使用自动映射器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);
答案 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。