我們使用下面的代碼來生成SQL代碼來查詢一個firebird數據庫;C#LINQ查詢日期時間文字生成
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轉換爲正在執行的字符串?
我還應該提到,我們使用NHibernate作爲此項目的ORM。
是Ayende的分析器嗎?它試圖告訴你,這實際上是一個參數 - @ p1/@ p2 - 所以它真的歸結爲:@ p1/@ p2是如何聲明的? as [n] [var] char?或作爲日期時間? – 2011-02-18 07:08:01