我有一个带有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
有谁能告诉我如何将字符串转换为整数?
答案 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
格式的一个优点是它基于自然字符串排序规则。