2016-09-29 56 views
0

为什么一个可为空的int使用linq给出这个错误?可空对象在Linq中必须有一个值where子句

public void test(int? variableId) 
{ 
    var date = _dbContext.Set<MyEvent>() 
       .Where(x => x.Calendar.id == (variableId.HasValue ? variableId : x.Calendar.id)) 
       .ToList(); 
} 
  • variableId.HasValue是假
  • variableId是空
+0

是否所有的日历!= null? –

+0

是的,我的日历不可为空 – Ruan

+0

variableId.HasValue和variableId!= null都是相同的,所以如果你的变量Id为null,那么variableId.HasValue将始终为false,当你有一些值时,它会显示一个真值可空的int。 – Nadeem

回答

0

你应该写为(variableId.HasValue variableId :?x.Calendar.id)

假设variableId为空,那么你有一个非常有趣的表达式.Where(x => x.Calendar.id == x.Calendar.id)表示 - 所有记录。你的代码的问题是,你的原始表达式最有可能导致客户端过滤,但不是SQL端过滤。最好重写它:

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