Я запускаю простое приложение .NET Core WebApi с OData Query v4 и SQL Server 2012.
Это работает, но очень медленно:
GET /api-endpoint?$filter=date(MyDateTimeField) ge 2018-01-01&$top=100
SQL-запрос, сгенерированныйURL выше:
SELECT TOP 100 * FROM MyTable WHERE ((((DATEPART(year, [MyDateTimeField]) * 10000) + (DATEPART(month, [MyDateTimeField]) * 100)) + DATEPART(day, [MyDateTimeField])) >= (((2018 * 10000) + (1 * 100)) + 1))
Когда я пытаюсь сделать это:
GET /api-endpoint?$filter=MyDateTimeField ge 2018-01-01T00:00:00.00Z&$top=100
Он генерирует следующий запрос SQL:
SELECT TOP 100 * FROM MyTable WHERE [MyDateTimeField] > '2018-01-01T00:00:00.0000000'
, который возвращает эту ошибку:
Не удалось выполнить преобразование при преобразовании даты и / или времени из символьной строки.
Каким будет синтаксис запроса OData для создания запроса SQL, аналогичного этому?
SELECT TOP 100 * FROM MyTable WHERE [MyDateTimeField] > '2018-01-01'