为什么我的Linq Oracle DB查询无法正确比较时间戳和日期时间?

我正在使用Linq查询表示Oracle数据库的EF6上下文。我试图基于TIMESTAMP字段从表中选择行,该字段将日期时间最多存储几分之一秒。这是您可以编写的最垃圾标准的查询,但它不起作用。

data = await dbContext.MyTable.Where(x => x.Timestamp > LastTimestamp).ToArrayAsync();

此查询似乎返回表中的所有数据,而不管时间戳的值如何。当我单步执行代码并检查返回的每个实体的属性时,它们具有正确的数据,但不应该将它们作为结果集的一部分。

该实体将Timestamp属性指定为DateTime对象,这是Oracle数据类型TIMESTAMP的正确表示吗?

我认为问题在于高分辨率时间戳最终总是比我传递的日期时间稍早,而Linq已将其截断。有办法解决吗?

一些相关问题:

Can't compare 2 dates in oracle correctly

EF6 Oracle TimeStamp & Date

How can I get Entity Framework with Oracle to send fractional seconds to a database in a query?

iCMS 回答:为什么我的Linq Oracle DB查询无法正确比较时间戳和日期时间?

正如我在评论部分所指出的,我遇到了同样的问题:

Entity Framework Oracle Timestamp

我写信给Oracle团队,他们承认这是一个错误。您可以在以下位置查看我的问题:https://community.oracle.com/thread/4288922,您需要等待Oracle.ManagedDataAccess.EntityFramework的新版本得到修复。

但是,作为一种解决方法,您可以使用SQLRawQuery,它对我们有用。

dbContext.Database.SqlQuery("SELECT * FROM Mytable WHERE Timestamp > :LastTimestamp",new OracleParameter("LastTimestamp",OracleDbType.TimeStamp,LastTimestamp,System.Data.ParameterDirection.Input)).ToList(); 
本文链接:https://www.f2er.com/2210722.html

大家都在问