【问题标题】:C# LINQ Oracle date FunctionsC# LINQ Oracle 日期函数
【发布时间】:2012-11-13 10:57:47
【问题描述】:

我正在尝试使用 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)? 如果没有,请告诉我如何解决此问题。

谢谢

【问题讨论】:

  • 您是否为 Oracle 使用了 EntityFramework 提供程序?或者你用的是什么 linq?
  • @KirillBestemyanov 我正在使用 Mindscape Lightspeed ORM 谢谢
  • @user1079925,'24/11/2012 00:00:00' 来自哪里?它来自DateTime 变量吗?还是string?能否也提供 C# 代码?
  • @Cade - 按要求添加 C# 代码
  • @user1079925:您必须向 Mindscape 提交错误。问题出在他们的 LINQ 查询提供程序中。

标签: c# linq oracle date


【解决方案1】:

我不知道这是否真的有效,但这是我会尝试的:

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

希望这将为生成的 SQL 添加适当的 TO_DATE 调用。我同意这听起来像是 LINQ 提供程序中的错误的评论。

【讨论】:

  • 感谢您的输入 - 您的解决方案在数据库字段周围放置了一个 TRUNC(),但仍将 c# 变量呈现为生成的 SQL 中的字符串(无 TO_DATE)。我怀疑 Jon(和你自己)是对的,因为它是 Mindscape Lightspeed 中的一个错误。我已经向他们提出了这个问题,并会在他们回复后用解决方案更新这个问题。
猜你喜欢
  • 2012-04-05
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 2022-01-06
  • 2012-03-20
相关资源
最近更新 更多