Отже, ви прокручуєте вниз, тому що відповіді не працюють:
Це працює як магія (але вони кажуть, що це має проблеми з ефективністю для великих даних, і ви не дбаєте, як я)
1- Тип даних у базі даних - це "дата-час" і "нульовий" у моєму випадку.
Приклад формату даних у БД такий:
2018-11-06 15:33:43.640
В C # при перетворенні в рядок виглядає так:
2019-01-03 4:45:16 PM
Тож формат:
yyyy/MM/dd hh:mm:ss tt
2- Отже, спочатку потрібно підготувати змінні дати та часу у відповідному форматі:
Приклад 1
yourDate.ToString("yyyy/MM/dd hh:mm:ss tt")
Приклад 2 - діапазон дат і часу для останніх 30 днів
DateTime dateStart = DateTime.Now.AddDays(-30);
DateTime dateEnd = DateTime.Now.AddDays(1).AddTicks(-1);
3- Нарешті, запит linq, який ви втратили, намагаючись знайти день (Потрібно EF 6)
using System.Data.Entity;
_dbContext.Shipments.Where(s => (DbFunctions.TruncateTime(s.Created_at.Value) >= dateStart && DbFunctions.TruncateTime(s.Created_at.Value) <= dateEnd)).Count();
Щоб також взяти до уваги порівняння часу:
(DbFunctions.CreateDateTime(s.Created_at.Value.Year, s.Created_at.Value.Month, s.Created_at.Value.Day, s.Created_at.Value.Hour, s.Created_at.Value.Minute, s.Created_at.Value.Second) >= dateStart && DbFunctions.CreateDateTime(s.Created_at.Value.Year, s.Created_at.Value.Month, s.Created_at.Value.Day, s.Created_at.Value.Hour, s.Created_at.Value.Minute, s.Created_at.Value.Second) <= dateEnd)
Зверніть увагу, що такий спосіб, згаданий щодо інших питань та відповідей щодо stackoverflow, не працюватиме належним чином:
....
&&
(
s.Created_at.Value.Day >= dateStart.Day && s.Created_at.Value.Day <= dateEnd.Day &&
s.Created_at.Value.Month >= dateStart.Month && s.Created_at.Value.Month <= dateEnd.Month &&
s.Created_at.Value.Year >= dateStart.Year && s.Created_at.Value.Year <= dateEnd.Year
)).count();
якщо початковий день був, наприклад, у цьому місяці, а кінцевий - у наступному, запит поверне помилковий результат і результатів не буде, наприклад:
DatabaseCreatedAtItemThatWeWant = 2018/12/05
дата початку = 01.12.2018
Кінцева дата = 04.04.2019
запит завжди буде шукати дні між 01 і 04, не беручи до уваги "місяць", тому "s.Created_at.Value.Day <= dateEnd.Day" не вдасться
І якщо у вас дійсно великі дані, ви б виконували власний запит SQL, а не linq
...
... where Shipments.Created_at BETWEEN CAST(@Created_at_from as datetime) AND CAST(@Created_at_to as datetime))
....
Дякую