#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>();