为什么我的 Linq Oracle DB 查询没有正确比较时间戳和日期时间?
Why is my Linq Oracle DB query not comparing timestamp with datetime correctly?
我正在使用 Linq 查询表示 Oracle 数据库的 EF6 上下文。我正在尝试根据 TIMESTAMP 字段从 table 中获取 select 行,该字段将日期时间存储到几分之一秒。这是您可以编写的最标准的查询,但它不起作用。
data = await dbContext.MyTable.Where(x => x.Timestamp > LastTimestamp).ToArrayAsync();
此查询似乎 return 来自 table 的所有数据,而不管时间戳的值。当我单步执行代码并检查每个实体的属性时 returned,它们具有正确的数据,但它们不应该是结果集的一部分。
实体将时间戳属性指定为 DateTime 对象,这是 Oracle 数据类型 TIMESTAMP 的正确表示吗?
我认为问题在于高分辨率时间戳最终总是略早于我传入的日期时间,该日期时间已被 Linq 截断。有办法处理吗?
一些相关问题:
EF6 Oracle TimeStamp & Date
How can I get Entity Framework with Oracle to send fractional seconds to a database in a query?
正如我在评论部分指出的那样,我遇到了同样的问题:
我写信给 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();
我正在使用 Linq 查询表示 Oracle 数据库的 EF6 上下文。我正在尝试根据 TIMESTAMP 字段从 table 中获取 select 行,该字段将日期时间存储到几分之一秒。这是您可以编写的最标准的查询,但它不起作用。
data = await dbContext.MyTable.Where(x => x.Timestamp > LastTimestamp).ToArrayAsync();
此查询似乎 return 来自 table 的所有数据,而不管时间戳的值。当我单步执行代码并检查每个实体的属性时 returned,它们具有正确的数据,但它们不应该是结果集的一部分。
实体将时间戳属性指定为 DateTime 对象,这是 Oracle 数据类型 TIMESTAMP 的正确表示吗?
我认为问题在于高分辨率时间戳最终总是略早于我传入的日期时间,该日期时间已被 Linq 截断。有办法处理吗?
一些相关问题:
EF6 Oracle TimeStamp & Date
How can I get Entity Framework with Oracle to send fractional seconds to a database in a query?
正如我在评论部分指出的那样,我遇到了同样的问题:
我写信给 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();