我对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不为空时,才会映射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
});
});
但不同的是,后者在映射过程中运行得更快。
在为automapper设置条件方面,有一个很好的文档。