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

时间:2016-12-08 12:15:19

标签: c# linq datetime

我有以下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}之类的值。 / p>

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

2 个答案:

答案 0 :(得分:3)

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

另一种可能性是difference between datetime and datetime2 in SQL Server

答案 1 :(得分:0)

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

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

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

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

<强>更新

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