Automapper中Condition的自定义值

问题描述

我有类似的情况

如果总天数少于30天,那么我必须将Salary设置为null

this.CreateMap<Foo,Doo>()
    .ForMember(dst => dst.Salary,opt => {
                              opt.Condition(src => src.JoinedDate.Days <= 30));
                              opt.MapFrom(null)
}

但是我遇到错误“找不到Foo类型的成员。参数名称名称”。但没有任何属性名称”。

问题是如何在条件检查中将空值传递给目标属性,如果天数大于30,则如何保留现有值。

opt.MapFrom(null)

解决方法

尝试使用:

ResolveUsing

UPD

要保留目标中的ForMember(dst => dst.Salary,o => o.ResolveUsing(src => src.JoinedDate.Days > 30 ? src.Salary: null)); ,请使用this.CreateMap<Foo,Doo>() .ForMember(dst => dst.Salary,opt => opt.MapFrom(src => src.JoinedDate.Days <= 30 ? null : src.Salary)) 的重载,同时接受源和目标:

Salary
,

您可以使用自动映射器内联foreach

mclapply
,

我只是结合了以上两种解决方案,并找到了问题的答案。

ForMember(dst => dst.Salary,opt => opt.ResolveUsing((src,dst) => src.JoinedDate.Days <= 30 ? null: dst.Salary));