可空对象必须在Linq where子句中有一个值

本文关键字:子句 where 有一个 Linq 对象 | 更新日期: 2023-09-27 18:09:20

为什么一个可空的int使用linq会给出这个错误?

public void test(int? variableId)
{
     var date = _dbContext.Set<MyEvent>()
              .Where(x => x.Calendar.id == (variableId.HasValue ? variableId   : x.Calendar.id))
              .ToList();
}
  • variableId。HasValue是false
  • variableId为null

可空对象必须在Linq where子句中有一个值

应该写为(variableId。HasValue吗?variableId。Value: x.Calendar.id)

假设variableId为空,那么你有一个非常有趣的表达式。其中(x => x. calendar .id == x. calendar .id)表示-所有记录。您的代码的问题是,您的原始where表达式最有可能导致客户端过滤,而不是sql端过滤。最好这样重写:

var date = variableId.HasValue
      ?_dbContext.Set<MyEvent>().Where(x => x.Calendar.id == variableId.Value))
      :_dbContext.Set<MyEvent>();