我有一个如下所示的映射配置文件:
public class MappingProfile : Profile {
public MappingProfile()
{
// DTO Mapping
CreateMap<Animal, AnimalDto>()
.ForMember(dest => dest.ReceivalDate, opt => opt.MapFrom(src => src.Receival.ReceivalDate));
}
}
现在的问题是我有一个
Receival
作为 Animal
类的一部分,有时可能是 null
。但是,如果我尝试以下任何操作,我会收到错误:
src.Receival != null ? src.Receival.ReceivalDate : null
无法将 lambda 表达式转换为类型“IValueResolver
”,因为它不是委托类型
src?.Receival.ReceivalDate
表达式树 lambda 不能包含空传播运算符
现在我的问题是如何在使用 MappingProfiles 时使用 lambda 表达式进行 null 检查?
AutoMapper 自动处理这个问题。
如果您的 IDE 抛出
src?.Receival.ReceivalDate
错误,您可以使用 src.Receival.ReceivalDate
或 src.Receival!.ReceivalDate
代替 Dereference of a possibly null reference
。
可能值得注意的是,
dest.ReceivalDate
必须可为空才能起作用。
@zaitsman 的评论有所帮助,但是,我最终采用的解决方案是:
.ForMember(dest => dest.ReceivalDate, opt => opt.MapFrom(src => (src.Receival != null) ? src.Receival.ReceivalDate : (DateTime?) null))
之所以有效,是因为
null
不能用于 Lambda 表达式;然而,(DateTime?) null
做到了。