我有以下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>
查询清楚地说大于。这里发生了什么?
答案 0 :(得分:3)
每个属性都有几分之一秒。最有可能的是,您的记录不是精确创建的,而任何用户创建的时间都是这样设置的。
另一种可能性是difference between datetime
and datetime2
in SQL Server。
答案 1 :(得分:0)
DateTime
类型以比秒更高的精度存储时间。它们可能在毫秒级甚至是刻度(100纳秒)水平上不同。
如果您想在更高级别进行比较,请尝试以下方法:
(p.ActionDate.Ticks / 10000000) > (fromDate.Ticks / 10000000)
其中10000000
是秒中的刻度数。由于/
是一个截断分数的整数除法,因此将刻度变为完整的秒数。
<强>更新强>
好像你正在使用实体框架。上面的比较可能不适用于那里。解决方案是针对数据库运行原始查询,执行ToList
,然后使用上面的逻辑在LINQ2Objects
查询中再次过滤结果。