C# AutoMapper:在条件映射中验证后按源值设置目标值
C# AutoMapper: set destination value by source value after validation in conditional mapping
我对 AutoMapper 还很陌生,想知道如何根据不同的源 属性 值将目标成员设置为一个值,如果该值为空,我只想应用默认行为Automapper 的(当源为空时保留目标值)
CreateMap<ClassA, ClassA>()
.ForMember(dest => dest.PropertyA, opt =>
opt.MapFrom(src => src.PropertyB!= null ? null : opt.UseDestinationValue())
)
这对 opt.UseDestinationValue() 不起作用(不编译),我可以在这里使用什么选项?
请帮忙
尝试为映射目标设置先决条件 属性。
CreateMap<ClassA, ClassA>().ForMember(dest => dest.PropertyA, opt => opt.PreCondition((src, dest) => src.PropertyB != null));
只有当 PropertyB 不为 null 时,才会映射 PropertyA。我确实尝试了一个快速示例,它给出了预期的结果。
我认为您可以使用 PreCondition 选项进行映射 属性
CreateMap<ClassA, ClassA>()
.ForMember(dest => dest.PropertyA, opt => {
opt.PreCondition(src => src.PropertyB!= null);
opt.MapFrom(src => src.PropertyB);
});
希望能帮到你
您可以进行如下操作:
var configuration = new MapperConfiguration(cfg => {
cfg.CreateMap<ClassA,ClassA>()
.ForMember(dest => dest.PropertyA, opt => opt.Condition(src => (src.PropertyB!= null)));
});
或如下:
var configuration = new MapperConfiguration(cfg => {
cfg.CreateMap<ClassA,ClassA>()
.ForMember(dest => dest.PropertyA, opt => {
opt.PreCondition(src => (src.PropertyB!=null));
opt.MapFrom(src => src.PropertyB); // mapping process takes place here
});
});
但不同的是,在映射过程中,后者运行得更快。
在自动映射器的设置条件方面有一个很好的文档:
https://docs.automapper.org/en/stable/Conditional-mapping.html
我对 AutoMapper 还很陌生,想知道如何根据不同的源 属性 值将目标成员设置为一个值,如果该值为空,我只想应用默认行为Automapper 的(当源为空时保留目标值)
CreateMap<ClassA, ClassA>()
.ForMember(dest => dest.PropertyA, opt =>
opt.MapFrom(src => src.PropertyB!= null ? null : opt.UseDestinationValue())
)
这对 opt.UseDestinationValue() 不起作用(不编译),我可以在这里使用什么选项? 请帮忙
尝试为映射目标设置先决条件 属性。
CreateMap<ClassA, ClassA>().ForMember(dest => dest.PropertyA, opt => opt.PreCondition((src, dest) => src.PropertyB != null));
只有当 PropertyB 不为 null 时,才会映射 PropertyA。我确实尝试了一个快速示例,它给出了预期的结果。
我认为您可以使用 PreCondition 选项进行映射 属性
CreateMap<ClassA, ClassA>()
.ForMember(dest => dest.PropertyA, opt => {
opt.PreCondition(src => src.PropertyB!= null);
opt.MapFrom(src => src.PropertyB);
});
希望能帮到你
您可以进行如下操作:
var configuration = new MapperConfiguration(cfg => {
cfg.CreateMap<ClassA,ClassA>()
.ForMember(dest => dest.PropertyA, opt => opt.Condition(src => (src.PropertyB!= null)));
});
或如下:
var configuration = new MapperConfiguration(cfg => {
cfg.CreateMap<ClassA,ClassA>()
.ForMember(dest => dest.PropertyA, opt => {
opt.PreCondition(src => (src.PropertyB!=null));
opt.MapFrom(src => src.PropertyB); // mapping process takes place here
});
});
但不同的是,在映射过程中,后者运行得更快。
在自动映射器的设置条件方面有一个很好的文档:
https://docs.automapper.org/en/stable/Conditional-mapping.html