Search code examples
c#entity-framework-corelinq-to-entitiesentity-framework-core-3.0

Null value is still evaluated after testing it with condition


I have the following LINQ query:

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

I get an error when user.Address is null in:

user.Address.CountryCode

To avoid that I tried to use:

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

But it seems user.Address.CountryCode is still evaluated.

How can I avoid that?


Solution

  • It's definitely EF Core 3.0 query translator defect.

    For now (and in general) you can avoid it by not using conditional operator ?: for criteria expressions which need to be converted to SQL query parameters (like your user.Address.CountryCode), but the equivalent logical binary expressions.

    e.g. instead of

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

    use the equivalent

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