Entity Framework получает строки текущей даты (в то время как время в этот день)

#c# #sql-server #entity-framework

#c# #sql-сервер #entity-framework

Вопрос:

У меня есть таблица, в которой значение dateime выглядит следующим образом

 2021-12-08 10:10:54.657
2021-12-08 10:10:41.567
2021-12-08 10:09:51.960
2021-12-08 10:10:54.657
2021-12-08 10:10:41.567
2021-12-08 10:09:51.960
2021-12-08 10:10:54.657
 

и я хочу получить этот день или сегодня (сейчас 8 декабря 2021 года). Итак, я попытался использовать EF в контроллере :

  ViewBag.CByUserToday = _db.ArrayDatas.Where(a => a.CreatedBy == user amp;amp; a.CreatedDate == DateTime.Today.Date).Count();
 

Но я все еще не получил строки. Когда я пытался отладить DateTime.Сегодня.Дата, это сказано DateTime .Сегодня = {09/12/2021 00:00:00} . Но когда я попытался обновить эту созданную дату до ‘2021-12-09 00:00:00.000’, ее можно восстановить.
Итак, как получить те строки, которые я создал сегодня (игнорируя время)?

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

1. Используйте > и < .

Ответ №1:

Убедитесь, что столбец больше или равен сегодняшнему дню и меньше завтрашнего:

 DateTime today = DateTime.Today;
DateTime tomorrow = today.AddDays(1);
ViewBag.CByUserToday = _db.ArrayDatas
    .Where(a => a.CreatedBy == user 
             amp;amp; a.CreatedDate >= today 
             amp;amp; a.CreatedDate < tomorrow)
    .Count();
 

Таким образом, ваша СУБД сможет использовать подходящий индекс для столбцов CreatedBy и CreatedDate для удовлетворения вашего запроса.

Обычно предпочтительнее избегать вызова функций для столбца, когда вы пытаетесь его отфильтровать, поскольку это означает, что запрос невозможно выполнить. Однако, согласно этому потоку в администраторе базы данных, приведение datetime / datetime2 column к date допустимо, по крайней мере, в Microsoft SQL Server.