【问题标题】:SQL linq convert string to intSQL linq 将字符串转换为 int
【发布时间】:2015-02-26 14:06:23
【问题描述】:

我有一个带有 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

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

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    由于您的列是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 格式的优点之一是它基于自然字符串排序 规则工作。

    【讨论】:

    • 感谢您的回答,但我什至无法解析这个原因:运算符'
    • @FRules,我的错,使用 CompareTo 就像 where db.Timestamp.CompareTo(past) &gt; 0 一样,我将 C# 代码与 SQL 混合在一起。
    • 谢谢!我认为它奏效了!就我而言,我不得不使用“”。
    • @FRules,哦,是的。刚刚看到你的比较。
    猜你喜欢
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 2013-02-28
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多