【问题标题】:EF comparing strings representing SAP dates in a linq query?EF 在 linq 查询中比较表示 SAP 日期的字符串?
【发布时间】:2023-04-04 23:13:02
【问题描述】:

在我的表中有一个包含日期的 varchar 字段。 (这就是 SAP 存储日期的方式) 无论如何要针对此字段运行查询,类似于:

from c in db.Set<MyTable>()
   where c.Date >= "20120921" && c.Date <= "20121021"
   select c

我尝试做一个 String.Compare,但 EF 无法将其转换为 sql。

where Stirng.Compare(c.Date, "20120921") >= 0

我还尝试将两个字符串都转换为 int 并进行比较,但 EF 再次不支持。

【问题讨论】:

  • 顶部的“类似”查询有什么问题?
  • 为什么不能用格式解析日期然后在查询中使用?
  • @JoachimIsaksson 第一个无法编译,无法将运算符应用于字符串
  • @Roar 那会很慢

标签: .net linq entity-framework sap


【解决方案1】:

您可以尝试使用需要三个strings 的SqlFunctions.DateDiff 方法重载,如下所示:

var res = from c in db.Set<MyTable>()
   where SqlFunctions.DateDiff("dd", c.Date, "20120921") >= 0
      && SqlFunctions.DateDiff("dd", c.Date, "20121021") < 0
   select c

【讨论】:

  • 是的,谢谢,我不得不用“dd”替换“ms”
  • @aryaxt 完美,感谢您让我知道您将ms 更改为dd - 我编辑了答案,以防其他人需要做这种性质的事情。我还编辑了标题以提及 SAP 字符串,以便更容易找到您的问题。
  • 仅供参考:这使得查询非常慢
  • @aryaxt 这很奇怪。您在与c.Date 对应的列上是否有索引?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 2010-11-08
  • 1970-01-01
  • 2020-03-05
  • 2012-10-19
  • 1970-01-01
  • 2012-10-19
相关资源
最近更新 更多