在方法中提取时 EF Core 忽略条件

EF Core ignoring condition when extracted in method

中提取 IQueryable 上的简单 Linq2Entity 条件后
orders = orders.Where(o => o.AddressId.HasValue && _validAddressIds.Contains(o.AddressId.Value));

像这样的方法:

orders = orders.Where(o => IsValidAddress(o.AddressId));

...

private bool IsValidAddress(long addressId)
{
  return adressId.HasValue && _validAddressIds.Contains(addressId);
}

条件不再包含在生成的 SQL 中,它仅在内存中应用。这是为什么???

我们必须使用这样的表达式:

public Expression<Func<T, bool>> GetFilteredAddressExpression<T>() where T : IAddress
{
    return x => x.AddressId != null && _validAddressIds.Contains(x.AddressId.Value);
}