У меня есть приложение ASP. NET Core MVC с культурой, установленной на en-GB
с использованием формата даты и времени dd/mm/yyyy
.
Я использую:
- . NET Core 2.1
- EF Core 2.2
- SQL Сервер 2019 (v15)
- Столбец даты имеет тип
datetime2
Однако для одного из моих запросов мне нужно иметь формат yyyy-mm-dd
при запросах через EF Core.
var xyx = db.zyz
.Where(x => x.date >= startdate && x.date<= enddate)
......
Приведенный выше запрос не может вернуть набор результатов даже если в таблице zyz есть запись в соответствии с условием.
Я думаю, это происходит только тогда, когда startdate и enddate совпадают.
Например, предположим, что у zyz есть запись для даты 2020-04-19
Запрос
var dt = DateTime.ParseExact("20200419","yyyyMMdd",CultureInfo.InvariantCulture);
var xyx = db.zyz
.Where(x=>x.date >= dt && x.date<= dt)
......
Не удается получить какие-либо строки. Он возвращает 0 строк.
Я думаю, что это из-за формата даты и времени.
Поле даты в zyz в БД имеет формат 2020-19-04 00:00:00.0000000
Два На ум приходят вопросы:
- Это из-за формата даты-времени, который я не получаю в результате? Разве EF Core не заботится о форматировании?
- Когда я использую
ParseExact
и другие средства для анализа даты в нужном формате. Это не работает. Я всегда получаю дату в формате dd/mm/yyyy
.
Что я пробовал, для разбора даты:
var dt = DateTime.ParseExact("20200415","yyyyMMdd",CultureInfo.InvariantCulture);
DateTime theTime = DateTime.ParseExact("20200415",
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None);
var dts = DateTime.ParseExact("20200415", "yyyyMMdd",new CultureInfo("en-ZA"));
Вышеуказанные запросы всегда возвращают дату формата 19/04/2020 00:00:00
Как я понимаю, поскольку datetime - это просто тип данных, не должен ли запрос быть независимым от формата datetime и возвращать данные независимо от формата datetime?