使用 AutoMapper 时如何在 lambda 表达式中进行 null 检查?

问题描述 投票:0回答:2

我有一个如下所示的映射配置文件:

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 检查?

c# automapper
2个回答
0
投票

AutoMapper 自动处理这个问题。

如果您的 IDE 抛出

src?.Receival.ReceivalDate
错误,您可以使用
src.Receival.ReceivalDate
src.Receival!.ReceivalDate
代替
Dereference of a possibly null reference

可能值得注意的是,

dest.ReceivalDate
必须可为空才能起作用。


-1
投票

@zaitsman 的评论有所帮助,但是,我最终采用的解决方案是:

.ForMember(dest => dest.ReceivalDate, opt => opt.MapFrom(src => (src.Receival != null) ? src.Receival.ReceivalDate : (DateTime?) null))

之所以有效,是因为

null
不能用于 Lambda 表达式;然而,
(DateTime?) null
做到了。

© www.soinside.com 2019 - 2024. All rights reserved.