在使用条件测试后仍然评估空值

Null value is still evaluated after testing it with condition

我有以下 LINQ 查询:

houses.Where(x => 
  x.A && user.B 
  || 
  (x.Address == null || user.Address == null ? false : x.Address.CountryCode == user.Address.CountryCode
))

user.Address 为空时出现错误:

user.Address.CountryCode

为了避免这种情况,我尝试使用:

x.Address == null || user.Address == null

不过好像user.Address.CountryCode还在评价中

我怎样才能避免这种情况?

这绝对是 EF Core 3.0 查询转换器缺陷。

现在(通常)您可以通过不对需要转换为 SQL 查询参数的条件表达式使用条件运算符 ?: 来避免它(例如您的 user.Address.CountryCode ), 而是等效的逻辑二进制表达式。

例如而不是

(x.Address == null || user.Address == null ? false : x.Address.CountryCode == user.Address.CountryCode)

使用等效项

(x.Address != null && user.Address != null && x.Address.CountryCode == user.Address.CountryCode)

我个人觉得这个逻辑很混乱。你可以试试:

( (x?.Address?.CountryCode != null && user?.Address?.CountryCode != null) ? x.Address.CountryCode == user.Address.CountryCode : false

如果这不起作用,那么 AddressCountryCode 属性发生了一些非常奇怪的事情!可能和entity framework问题。