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 回答