SQL linq将字符串转换为int

时间:2015-02-26 14:06:24

标签: c# linq

我有一个带有varchar时间戳列的表

id | filename | timestamp
-------------------------------
1  | example  | 20150226145109

现在我需要一个查询,它只显示时间戳超过7天的条目。

DateTime date = DateTime.Now.AddDays(-7);
string past = date.ToString("yyyyMMddHHmmss");

不幸的是,我现在无法在我的linq中执行此操作:

var requests = from request in db.Request
               where Convert.ToInt32(Timestamp) < Convert.ToInt32(past)) 
               select request;
  

“LINQ to Entities无法识别方法'Int32   ToInt32(System.String)'方法,这个方法无法翻译   进入商店表达。“

我不知道如何解决这个问题。

在早期版本中,我执行了这样的原始sql:

SELECT filename, timestamp FROM dbo.Requests WHERE timestamp < 20150219060814

有谁能告诉我如何将字符串转换为整数?

1 个答案:

答案 0 :(得分:2)

由于您的列是varchar类型,并且它以yyyyMMddHHmmss模式存储日期,您可以使用简单的字符串比较(而不是将其转换为int)。像:

var requests = from request in db.Request
               where db.Timestamp.CompareTo(past) < 0
               select request;

考虑以下示例SQL语句。

SELECT  1 
where'20150226145109' > '20140226145109'

它将为您提供1,因为“字符串”'20150226145109'大于'20140226145109' (一年之久的日期)

虽然您应该将DateTime存储在各自的列类型中,但当前DateTime格式的一个优点是它基于自然字符串排序规则。