LinqToSql с проблемой дат - PullRequest
       12

LinqToSql с проблемой дат

2 голосов
/ 06 января 2010

У меня есть простой запрос LinqToSql

from p in GL_PROJECTs
where p.CREATE_DT == new DateTime(2009,10,26)
select new p

Некоторые записи в базе данных имеют даты создания с частями времени, отличными от 00:00:00, поэтому этот запрос не будет получен. То, чего я хочу достичь, - это поиск без учета времени на весь день.

Я попробовал следующее, добавив дату, в попытке сравнить как для:

from p in GL_PROJECTs
where p.CREATE_DT.Date >= new DateTime(2009,10,26)
select new p

но в LinqPad я получаю следующую ошибку:

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

Есть идеи, почему это не работает и что я могу сделать, чтобы это работало?

Спасибо

Ответы [ 3 ]

2 голосов
/ 06 января 2010

Просто проверьте диапазон

from p in GL_PROJECTs 
where p.CREATE_DT >= new DateTime(2009,10,26) && 
      p.CREATE_DT < new DateTime(2009,10,27) 
select new p
0 голосов
/ 06 января 2010

Если CREATE_DT разрешено иметь значение NULL в базе данных, оно будет сопоставлено с типом Date? в .net (это универсальный тип Nullable<Data>).

Вы можете получить фактическую дату типа Nullable по его свойству Value.

Попробуйте

from p in GL_PROJECTs
where p.CREATE_DT.Value.Date == new DateTime(2009,10,26)
select new p

Но это вызовет исключение, если CREATE_DT действительно равно нулю. Чтобы избежать этого исключения, вы должны убедиться, что тип Nullable действительно содержит значение:

from p in GL_PROJECTs
where p.CREATE_DT.HasValue && p.CREATE_DT.Value.Date == new DateTime(2009,10,26)
select new p
0 голосов
/ 06 января 2010

Если это допустимо, сначала нужно использовать свойство Value, а затем вызвать Date для этого:

p.CREATE_DT.Value.Date

Тем не менее, использование свойства Date вернет дату с отметкой времени в полночь, поэтому с ним все равно будет связано время. Это не поможет тому, что вы описываете. Вы можете воспользоваться предложением @ AlbertEin и проверить диапазон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...