Запрос Linq to SQL DateTime2 - PullRequest
0 голосов
/ 08 мая 2011

У меня есть таблица с полем datetime2, и мне нужно извлечь из нее все строки, где сегодня находится дата. Довольно странно (на мой взгляд, но я уверен, что для этого есть веская причина), если я сделаю:

MyTable.Where(t => t.Date == DateTime.Today).ToList()

ничего не возвращается, хотя есть записи с сегодняшней датой.

Что мне здесь не хватает? Я думал, что datetime2 позволяет вам делать такие запросы вместо того, чтобы указывать таймфрейм больше и меньше?

Редактировать

Я пытался использовать часть .Date представления DateTime2 в Linq to SQL:

MyTable.Where(t => t.Date.Date == DateTime.Today).ToList()

но я все еще ничего не получаю. Тем не менее, в моей базе данных есть строки со значением 2011-08-05 00:00:00.0000000, что явно сегодня.

Редактировать снова Я выполнил запрос:

List<string> dates = MyTable.Select(t => t.Date.Date.ToString()).ToList();

и я получаю результаты типа 2011-08-05, так что эта часть, очевидно, работает.

Однако, когда я запускаю

DateTime.Today.Date.ToString()

Я получаю 08/05/2011 00:00:00. Может ли добавление этой части времени быть причиной? Как бы я это убрал?

Редактировать 3

Получил работу, используя код:

MyTable.Where(t => t.Date.Date.ToString() == DateTime.Today.Date.ToString("yyyy-dd-MM")).ToList();

Это кажется хакерским (преобразование в строку перед сравнением) и, конечно, должен быть более чистый способ?

Ответы [ 2 ]

1 голос
/ 08 мая 2011

Похоже, что дата в базе данных не сегодня (8 мая).Вероятно, 5 августа.

0 голосов
/ 08 мая 2011

Похоже, ваше поле datetime2 называется Date.Вам необходимо использовать свойство Date этого поля Date, чтобы игнорировать время дня.

MyTable.Where(t => t.Date.Date == DateTime.Today).ToList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...