成员条件的自动映射器
Automapper for member condition
我正在使用自动映射器 6.1,我想将一些值从一个对象映射到另一个对象,但有一个条件,即这些值不能为 null,并且如果可以的话,并非所有对象属性都应该被映射轻松使用 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);
})
换句话说,对于我在自动映射器配置中定义的每个 属性,我想检查它是否为空,如果为空,则保留 x 的值。
调用此类自动映射器配置如下所示:
ClassA platform = Mapper.Map<ClassA>(classB);
如果我没有理解错的话,它可能比你想象的要简单。 opt.Condition
不是必需的,因为条件已在 MapFrom
中处理。
我认为以下内容应该可以实现您想要的:如果不是 null
,它将映射 Branch
。如果 Branch
(来自源)是 null
,那么它会将目标设置为 string.Empty
。
config.CreateMap<ClassA, Class>()
.ForMember(x => x.Branch, cd => cd.MapFrom(map => map.Branch ?? string.Empty));
如果你需要使用来自 x 的另一个 属性 而不是 string.Empty
,那么你可以这样写:
config.CreateMap<ClassA, Class>()
.ForMember(x => x.Branch, cd => cd.MapFrom(map => map.Branch ?? x.AnotherProperty));
如果您想实现复杂的逻辑但要保持映射整洁,您可以将逻辑提取到一个单独的方法中。例如:
config.CreateMap<ClassA, Class>()
.ForMember(x => x.Branch, cd => cd.MapFrom(map => MyCustomMapping(map)));
private static string MyCustomMapping(ClassA source)
{
if (source.Branch == null)
{
// Do something
}
else
{
return source.Branch;
}
}
您不需要 MapFrom,但您需要一个 PreCondition。参见 here。
我正在使用自动映射器 6.1,我想将一些值从一个对象映射到另一个对象,但有一个条件,即这些值不能为 null,并且如果可以的话,并非所有对象属性都应该被映射轻松使用 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);
})
换句话说,对于我在自动映射器配置中定义的每个 属性,我想检查它是否为空,如果为空,则保留 x 的值。
调用此类自动映射器配置如下所示:
ClassA platform = Mapper.Map<ClassA>(classB);
如果我没有理解错的话,它可能比你想象的要简单。 opt.Condition
不是必需的,因为条件已在 MapFrom
中处理。
我认为以下内容应该可以实现您想要的:如果不是 null
,它将映射 Branch
。如果 Branch
(来自源)是 null
,那么它会将目标设置为 string.Empty
。
config.CreateMap<ClassA, Class>()
.ForMember(x => x.Branch, cd => cd.MapFrom(map => map.Branch ?? string.Empty));
如果你需要使用来自 x 的另一个 属性 而不是 string.Empty
,那么你可以这样写:
config.CreateMap<ClassA, Class>()
.ForMember(x => x.Branch, cd => cd.MapFrom(map => map.Branch ?? x.AnotherProperty));
如果您想实现复杂的逻辑但要保持映射整洁,您可以将逻辑提取到一个单独的方法中。例如:
config.CreateMap<ClassA, Class>()
.ForMember(x => x.Branch, cd => cd.MapFrom(map => MyCustomMapping(map)));
private static string MyCustomMapping(ClassA source)
{
if (source.Branch == null)
{
// Do something
}
else
{
return source.Branch;
}
}
您不需要 MapFrom,但您需要一个 PreCondition。参见 here。