2012-11-13 76 views
1

在Oracle11g中使用,使用LINQ。C#LINQ Oracle日期函數

C#代碼:

DateTime convertedMinStartDateForEvent = Convert.ToDateTime(minStartDateForEvent); 
DateTime convertedMinEndDateForEvent = Convert.ToDateTime(minEndDateForEvent); 

var query = (from myTableRec in uow.myTable 
      where myTableRec.startdate >= convertedMinStartDateForEvent && myTableRec.endDate < convertedMinEndDateForEvent 

由LINQ生成的SQL給出

SELECT * 
FROM <table> 
WHERE start_date > '24/11/2012 00:00:00' and end_date < '28/11/2012 00:00:00' 

這會導致Oracle錯誤: - 日期格式ORA-01830

問題使用的日期時,出現轉換整個輸入串

添加TO_DATE之前圖片結束該查詢修復了ORA-01830,因爲它將字符串轉換爲oracle日期,同時知道日期格式。

SELECT * 
FROM <table> 
WHERE start_date > TO_DATE('24/11/2012 00:00:00','DD/MM/YYYY HH24:MI:SS') and end_date < TO_DATE('28/11/2012 00:00:00','DD/MM/YYYY HH24:MI:SS') 

那麼,有沒有辦法將TO_DATE添加到LINQ(for oracle)? 如果沒有,請告訴我如何解決此問題。

感謝

+0

您是否使用了甲骨文的EntityFramework供應商?或者你使用了什麼LINQ? –

+0

@KirillBestemyanov 我正在使用Mindscape Lightspeed ORM 謝謝 – user1079925

+0

@ user1079925,'24/11/2012 00:00:00''從哪裏來?它來自「DateTime」變量嗎?或'串'?你也可以提供C#代碼嗎? –

回答

0

我不知道這是否會實際工作,但是這是我想嘗試:

var query = from myTableRec in uow.myTable 
      where myTableRec.startdate >= convertedMinStartDateForEvent.Date 
       && myTableRec.endDate < convertedMinEndDateForEvent.Date 

(我已經編輯查詢指myTableRec - 我懷疑您發佈的代碼是不是你真正的代碼)

你甚至可能要添加Date部分所有引用:

var query = from myTableRec in uow.myTable 
      where myTableRec.startdate.Date >= convertedMinStartDateForEvent.Date 
       && myTableRec.endDate.Date < convertedMinEndDateForEvent.Date 

但願這會將相應的TO_DATE調用添加到生成的SQL中。我同意這樣的評論,這聽起來像LINQ提供者中的錯誤。

+0

感謝您的輸入 - 您的解決方案把一個TRUNC()圍繞數據庫字段,但仍呈現C#變量作爲生成的SQL中的字符串(無TO_DATE)。我懷疑Jon(和你自己)是對的,因爲它是Mindscape Lightspeed中的一個bug。我已經向他們提出了這個問題,並會在他們回覆時用解決方案更新這個問題。 – user1079925