Мы используем следующий код для генерации кода SQL для запроса к базе данных Firebird:
DSRCash.GetAll(x => x.Account.ID == Account.ID
&& x.Date_Record <= dateTO
&& x.Date_Record >= dateFROM).ToList();
Оба параметра dateTO и dateFROM не могут иметь значение DateTime, равное нулю, и это то же самое для их соответствующих столбцов базы данных.
Сгенерированное предложение SQL where выглядит следующим образом:
where (struct_cas0_.DELETED IS NULL)
and struct_cas0_.ACCOUNT_ID = 372 /* @p0 */
and struct_cas0_.DATE_RECORD <= '2011-02-18T13:00:00.00' /* @p1 */
and struct_cas0_.DATE_RECORD >= '2010-02-17T13:00:00.00' /* @p2 */
Вы можете видеть, что литерал DateTime был отформатирован с использованием "s" или стандартного сортируемого формата.Похоже, что Firebird не поддерживает этот формат даты, если мы удалим букву «T» из литерала datetime, запрос будет успешно выполнен.
Можно ли изменить преобразование DateTime в выполняемую строку?
Я должен также упомянуть, что мы используем NHibernate в качестве ORM для этого проекта.