可空对象必须在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
应该写为(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>();