2016-08-05 4 views
0

Я пытаюсь отфильтровать все строки в таблице SQL, имеющей определенную дату. Он работает, если столбец не имеет значения NULL, но сбой, если он есть.Фильтровать по нулевому полю datetime с помощью Linq

Это работает не обнуляемая полая дата и время:

ent.MyTable.Where(e => e.MyDate.Day == 12); 

Очевидно, что это работает не для обнуляемой полой даты и времени. После выполнения некоторых поиска в Интернете, я нашел много «решения» этой проблемы, которые выглядят как на следующее:

ent.MyTable.Where(e => e.MyDate != null && e.MyDate.Day == 12); 

К сожалению, это не работает для меня тоже. И это вполне понятно, почему, если я считаю, это сообщение об ошибке:

«System.Nullable» не содержит определение для «Дня» и не метод расширения «День» принятие первого аргумента типа «System.Nullable» может быть найдено (вы пропали без вести с помощью директивы или ссылка на сборку?)

Я хочу, чтобы избежать выборки все строки SQL и затем процеживают в .NET, так как я заинтересован только в очень небольшом количестве строк , Есть ли другой способ, который я не вижу в данный момент?

+0

является 'MyDate' определяется как Nullable' DateTime' в классах? Если это так, ваша вторая строка не должна компилироваться. Если нет, то ваша модель не соответствует базе данных. – user3185569

ответ

1

Используйте значение свойства обнуляемого даты

ent.MyTable.Where(e => e.MyDate.HasValue && e.Date.Value.Day == 12); 
+0

Исправьте свой ответ, должно быть, 'ent.MyTable.Where (e => e.MyDate.HasValue && e.Date.Value.Day == 12);' –

+0

спасибо @AdilMammadov – Mostafiz

+0

@AdilMammadov 'HasValue' и'! = null' эквивалентны для типов Nullable. – user3185569

1

Попробуйте это:

ent.MyTable.Where(e => e.MyDate.HasValue && e.MyDate.Value.Day == 12);