1

linqを使用して、Oracle11gで使用するSQLステートメントを生成しようとしています。

日付を使用すると問題が発生します。

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(oracleの場合)に追加する方法はありますか?そうでない場合は、この問題を回避する方法を教えてください。

ありがとう

4

1 に答える 1

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プロバイダーのバグのように聞こえるというコメントに同意します。

于 2012-11-13T13:55:47.043 に答える