Nullable对象必须在Linq中有一个值

时间:2016-09-29 10:10:00

标签: c# linq null

为什么可以为null的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

1 个答案:

答案 0 :(得分:0)

你应该把它写成(variableId.HasValue?variableId。 Value :x.Calendar.id)

假设variableId为null,那么你有一个非常有趣的表达式.Where(x =&gt; x.Calendar.id == x.Calendar.id)意味着 - 所有记录。你的代码的问题是你的原始表达式最有可能导致客户端过滤而不是sql端过滤。最好像以下一样重写它:

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