如何使用Linq-to-Entities查询SQL Server 2008中的时间戳?

时间:2010-12-05 08:12:18

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

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

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

我们假设我有一个DateTime dt对象;

我需要通过此datetime对象进行过滤,该对象返回该日期记录的所有记录(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 []'不包含   'Contains'的定义和最佳   扩展方法重载   “System.Linq.ParallelEnumerable.Contains(System.Linq.ParallelQuery,   TSource)'有一些无效   参数f:\ tests \ diet \ diet \ DataTier \ DietMo​​vieRepository.cs 30 32饮食

     

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

     

错误1委托   'System.Func'   不需要1   参数f:\ tests \ diet \ diet \ DataTier \ DietMo​​vieRepository.cs 30 26 diet

     

错误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;
        }

2 个答案:

答案 0 :(得分:3)

SQL Server“timestamp”与时间无关(实际上名称“timestamp”现在已标记为已弃用;“rowversion”相同且应该替代使用)。

如果你真的有“时间戳”,这是不可能的。如果您将日期时间设置为插入时间,则应该是微不足道的:

DateTime start = date.Date, end = start.AddDays(1);

...
where row.log_time >= start && row.log_time < end
...

此外,如果您主要进行日期范围搜索,则log_time可能是聚集索引的公平候选者。或者,如果您正在进行基于日期的查询,那么对于一个整数的非聚集索引也是有效的日期。

答案 1 :(得分:0)

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

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