【问题标题】:How to query a timestamp in SQL Server 2008 with Linq-to-Entities?如何使用 Linq-to-Entities 在 SQL Server 2008 中查询时间戳?
【发布时间】:2010-12-05 08:12:17
【问题描述】:

我在 SQL Server 2008 中有一个 timestamp 列。

现在我需要使用从日历服务器控件获取的日期来查询该列。

我们假设我得到了一个 DateTime dt 对象;

我需要按此日期时间对象进行过滤,该对象返回该日期(dt)上记录的所有记录。

   var a = DateTime.Now.ToString();
   var IsDone = from d in _le.diets
                 where d.log_time.Contains(a)
                 select d.done;

_le 是一个私有实体框架对象。

这段代码有问题:

错误 3 'byte[]' 不包含 “包含”和最好的定义 扩展方法重载 'System.Linq.ParallelEnumerable.Contains(System.Linq.ParallelQuery, TSource)' 有一些无效的 参数 f:\tests\diet\diet\DataTier\DietMo​​vieRepository.cs 30 32 饮食

错误 2 无法转换 lambda 表达式键入“字符串”,因为它 不是代表 输入 f:\tests\diet\diet\DataTier\DietMo​​vieRepository.cs 30 26 饮食

错误 1 ​​代表 '系统.功能' 不需要 1 参数 f:\tests\diet\diet\DataTier\DietMo​​vieRepository.cs 30 26 饮食

错误 4 实例参数:不能 从 'byte[]' 转换为 'System.Linq.ParallelQuery' f:\tests\diet\diet\DataTier\DietMo​​vieRepository.cs 30 32 饮食

我是 EF 初学者,感谢您的帮助!

更新

在 EF cs 文件中

我明白了

   public static diet Creatediet(global::System.Int64 id, global::System.Boolean done, global::System.Byte[] log_time)
        {
            diet diet = new diet();
            diet.id = id;
            diet.done = done;
            diet.log_time = log_time;
            return diet;
        }

【问题讨论】:

    标签: .net linq entity-framework linq-to-entities


    【解决方案1】:

    SQL Server“timestamp”与时间无关(事实上,“timestamp”这个名字现在被标记为不推荐使用;“rowversion”是相同的,应该改用)。

    如果你真的有一个“时间戳”,这是不可能的。如果您将日期时间设置为插入时间,则应该很简单:

    DateTime start = date.Date, end = start.AddDays(1);
    
    ...
    where row.log_time >= start && row.log_time < end
    ...
    

    此外,如果您主要进行日期范围搜索,则 log_time 可能是聚集索引的合适候选者。或者,如果您正在执行基于天的查询,那么一个整数上的非聚集索引(即天数)也可以工作。

    【讨论】:

    • 现在是 2016 年,当您生成带有 rowversion 的表时,EntityFramework 仍然使用时间戳
    【解决方案2】:

    假设您只想查看日期部分?然后你应该能够做这样的事情:

       var a = DateTime.Now;
       var isDone = from d in _le.diets
                     where d.log_time.Date == a.Date
                     select d.done;
    

    【讨论】:

    • 感谢您的回答,但看起来我无法获取 d.log_time.Date。因为 log_time 是数据库中的时间戳。
    • 哦,好的,log_time 的类型是什么?是时间跨度吗?
    • 我的意思是在模型中。它生成为二进制。我不确定你会如何质疑这个抱歉。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    相关资源
    最近更新 更多