#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.