.NET DateTime <>表达式树Oracle时间戳式搜索
本文关键字:Oracle 时间戳 搜索 表达式 DateTime NET | 更新日期: 2023-09-27 18:08:22
我需要知道我是否能得到线索。我试图通过ODP建立一个通过实体框架6 (LINQ到实体)评估的表达式树。. NET托管驱动程序(当前版本)到适当的Oracle语句,以便执行过滤。这对于string <> nvarchar2数据类型非常有效。Contains搜索的输出类似于:
Select *
[...]
FROM "MYSCHEMA"."MYTABLE" "Extent1"
WHERE ("Extent1"."ANVARCHAR2COLUM" LIKE '%givenStrValueToFind%')
现在我想为DateTime <> Timestamp(6)获得相同的结果,因为这行sql语句对oracle查询有效,并返回包含'08'的所有日期:
select * from "MYSCHEMA"."MYTABLE" where ATIMESTAMP6COLUMN like '%08%';
由于我是表达式树的新手,我首先需要知道(在谷歌搜索了很多并尝试了这个和那个之后),在我深入挖掘之前,这是否可能。如果是这样,怎样才能做到最好呢?因为没有包含方法定义的日期时间和日期时间?也许提供扩展方法?我不想直接对数据库执行查询。
任何提示将是很好的'unhook'给定的数据库数据类型也许…Thx .
对于EF 6,您可以使用:
ctx.MYTABLE.Where(x=>x.ATIMESTAMP6COLUMN.ToString().Contains("08")).ToList();
翻译成
SELECT
[Extent1].[some property name] AS [some property name],
[Extent1].[ATIMESTAMP6COLUMN] AS [ATIMESTAMP6COLUMN],
.
.
.
FROM [dbo].[MYTABLE] AS [Extent1]
WHERE CAST( [Extent1].[ATIMESTAMP6COLUMN] AS nvarchar(max)) LIKE N'%08%'
据我所知,EF的所有版本都不支持字符串函数,但EF 6。x支持这种函数(我测试的EF是EF 6.1.3,测试是用sql server localdb作为DBMS完成的)。
我不知道我是否理解了。无论如何,您不需要构建表达式树来避免在内存中加载DB。LINQ从表达式构建表达式树,EF将表达式树转换为SQL语句(使用EF提供程序),然后在DB上运行查询。
在你的例子中,LINQ查询应该是这样的
myContext.MYTABLE.Where(e => e.ATIMESTAMP6COLUMN.Contains("08").ToList();
编辑
转换:
可以使用。tostring()。它应该是一个规范函数(每个EF提供程序上都可用的函数)。
其他与DateTime相关的函数:
您可以查看其他规范函数(有一些关于日期的函数允许检索日期部分),也可以查看非规范函数(仅在oracle的EF Provider中实现的函数)。
引用:
规范函数https://msdn.microsoft.com/en-us/library/vstudio/bb738626(v=vs.100).aspx
实际上我找不到Oracle的非规范函数。
如果你需要的话,最好是问另一个问题。