2013-10-10 23 views
2

在我的表中有一个包含日期的varchar字段。 (那怎么SAP店日期) 反正运行针对该领域类似的查询:EF在linq查询中比较表示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不支持。

+0

这有什么错顶部的“类似”的查询? –

+0

为什么不能用格式解析日期然后在查询中使用? – Roar

+0

@JoachimIsaksson第一个不会编译,不能将运算符应用到字符串 – aryaxt

回答

2

您可以尝试使用SqlFunctions.DateDiff方法重载需要三个string S,这样的:

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 
+0

是的,它的工作感谢,我不得不用“dd”替换“ms” – aryaxt

+0

@aryaxt完美,谢谢你让我知道你把'ms'改成了'dd' - 我编辑了答案,以防其他人需要做这种事情。我还编辑了标题以提及SAP字符串,使您的问题更容易找到。 – dasblinkenlight

+0

供参考:这使查询非常缓慢 – aryaxt