Объект с нулевым значением должен иметь значение в предложении Linq where

#c# #linq #null

#c# #linq #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();
}
  
  • Переменный идентификатор.Значение имеет значение false
  • variableId равно null

Комментарии:

1. Все ли ваши календари != null?

2. Да, мои календари не обнуляются

3. Переменный идентификатор. HasValue и variableId != null оба одинаковы, поэтому, если ваш идентификатор переменной равен null, тогда variableId . Значение HasValue всегда будет равно false , оно будет показывать значение true, когда у вас есть какое-то значение в nullable int .

Ответ №1:

Вы должны записать его как (variableId.Имеет значение? Переменный идентификатор.Значение : x.Calendar.id )

Предполагая, что variableId равно null, тогда у вас есть очень забавное выражение.Где(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>();