繁体   English   中英

LINQ中的DateTime比较未返回正确的结果

[英]DateTime comparison in LINQ not returning correct results

我有以下LINQ来查询数据库并从特定日期检索已删除的产品。

 return _myDbEntities.Log
            .Where(p => p.Action.Equals("Deleted") &&
            (p.ActionDate > fromDate))
            .Select(p => new DeletedProduct()
            {
                ProductId = p.ProductId,
                ActionDate = p.ActionDate
            }).ToList();

但是,当fromDate来自日期= {12/8/2016 11:41:00 AM}时,查询正在检索诸如product.ActionDate.Value = {12/8/2016 11:41:00 AM}之类的值。

查询清楚地说大于。 这里发生了什么?

每个属性都有几分之一秒。 最有可能的是,您的记录不是精确创建的,而任何用户创建的时间都是这样设置的。

另一种可能性是SQL Server中datetimedatetime2之间差异

DateTime类型以比秒更高的精度存储时间。 它们可以在毫秒或甚至滴答(100纳秒)水平上不同。

如果您想在更高级别进行比较,请尝试以下方法:

(p.ActionDate.Ticks / 10000000) > (fromDate.Ticks / 10000000)

其中10000000是秒中的刻度数。 由于/是一个截断分数的整数除法,因此将刻度变为完整秒数。

更新:

看起来你正在使用实体框架。 上面的比较可能不适用于那里。 解决方案是针对数据库运行原始查询,执行ToList ,然后使用上面的逻辑在LINQ2Objects查询中再次过滤结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM