Добрый день. есть вот такой пример запроса.
идея в том чтоб взять записи которые созданы после определенного времени.
в результате он генерирует следующий SQL запрос который не совсем подходит, так как он возвращает запись которая была возвращена в прошлой выборке (я вытаскиваю данные по 10 записей).
пример запроса, который создается
SELECT "Contact"."Name" "Name", "Contact"."QSoftGSTime" "QSoftGSTime", "Contact"."ContactPhoto" "ContactPhoto", "Contact"."Phone" "Phone", "Contact"."CreatedOn" "CreatedOn", COALESCE("SysCityLcz"."Name", "City"."Name") "City.Name" FROM "public"."Contact" "Contact" LEFT OUTER JOIN "public"."City" "City" ON ("City"."Id" = "Contact"."CityId") LEFT OUTER JOIN "public"."SysCityLcz" "SysCityLcz" ON ("SysCityLcz"."RecordId" = "City"."Id" AND "SysCityLcz"."SysCultureId" = '{F0EA9715-8757-474C-AEE9-743D672E48C9}') WHERE "Contact"."CreatedOn" > TO_TIMESTAMP('2023-02-06 21:21:02.149', 'YYYY-MM-DD HH24:MI:SS.FF3') ORDER BY "CreatedOn" ASC NULLS FIRST LIMIT 10
получается что при выборке данных проверяется только первые три цифры из милисекунд ('2023-02-06 21:21:02.149', 'YYYY-MM-DD HH24:MI:SS.FF3'). в итоге я получаю два раза одну и ту же запись. решение это указывать все 6 цифр милисекунд следующий запрос выполняется корректно и не приводит к дублированию данных
SELECT "Contact"."Name" "Name", "Contact"."QSoftGSTime" "QSoftGSTime", "Contact"."ContactPhoto" "ContactPhoto", "Contact"."Phone" "Phone", "Contact"."CreatedOn" "CreatedOn", COALESCE("SysCityLcz"."Name", "City"."Name") "City.Name" FROM "public"."Contact" "Contact" LEFT OUTER JOIN "public"."City" "City" ON ("City"."Id" = "Contact"."CityId") LEFT OUTER JOIN "public"."SysCityLcz" "SysCityLcz" ON ("SysCityLcz"."RecordId" = "City"."Id" AND "SysCityLcz"."SysCultureId" = '{F0EA9715-8757-474C-AEE9-743D672E48C9}') WHERE "Contact"."CreatedOn" > TO_TIMESTAMP('2023-02-06 21:21:02.149528', 'YYYY-MM-DD HH24:MI:SS.FF6') ORDER BY "CreatedOn" ASC NULLS FIRST LIMIT 10
я не нашел способа управлять количеством цифр милисекунд в запросе.
можете подсказать как это правильно сделать?
пока что как хак я решил генерировать запрос с помощью EntitySchemaQuery, делать esqResult.GetSelectQuery(_connection), с него получать текст запроса и в нем уже подменять значения с помощью регулярки. но это выглядит костылем, который не хотелось бы оставлять.
спасибо!
Нравится
Добрый день,
К сожалению пока возможности управления этим количеством символов нет. Поэтому нужно подумать над альтернативными решениями обхода проблемы - возможно увеличить лимит с 10 записей на большее количество, чтобминимизировать риск ошибки, можно попробовать еще модифицировать фильтр. Возможно поможет добавление сортировки по Id - это сделает порядок записей всегда одинаковым, или просто использовать встроенную постраничность.