You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# AutoMapper条件映射:基于源属性值设置目标值及默认行为实现求助

解决AutoMapper根据源属性值动态设置目标成员的问题

嘿,刚接触AutoMapper就遇到这种自定义映射的需求很正常,我来给你捋捋怎么解决——你原来的写法问题在于opt.UseDestinationValue()是配置选项,不能放在MapFrom的lambda表达式里当返回值用。下面两个方案都能完美实现你的需求:

方案1:利用Condition控制映射时机

这个方案最贴合AutoMapper的设计思路,通过Condition指定什么时候执行自定义映射,什么时候沿用默认行为(保留目标值):

CreateMap<ClassA, ClassA>()
    .ForMember(dest => dest.PropertyA, opt => 
    {
        // 仅当源PropertyB不为null时,才执行后续的MapFrom规则
        opt.Condition(src => src.PropertyB != null);
        // 符合条件时,将目标PropertyA设为null
        opt.MapFrom(src => null);
    });

原理很简单:当src.PropertyB为null时,Condition不满足,AutoMapper会跳过这个成员的自定义映射,自动保留目标对象原本的PropertyA值,正好符合你的要求。

方案2:用ResolveUsing手动返回目标值

如果你更习惯直接控制返回逻辑,可以用ResolveUsing,它能同时访问源对象和目标对象,直接返回对应的值:

CreateMap<ClassA, ClassA>()
    .ForMember(dest => dest.PropertyA, opt => 
        opt.ResolveUsing((src, dest) => 
            src.PropertyB != null ? null : dest.PropertyA
        )
    );

这里的逻辑一目了然:如果源PropertyB不为null,就返回null给目标PropertyA;否则直接返回目标对象原本的PropertyA值,相当于保留目标值。

两个方案都能实现你的需求,方案1更简洁,利用AutoMapper的内置机制;方案2更直观,适合后续有更复杂逻辑扩展的场景。

内容的提问来源于stack exchange,提问作者eetawil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:57:35