0

好吧。在过去的几周里,我非常努力地学习了 .NET 数据提供程序用于 teradata 并建立了一个基础设施来查询 Teradata 数据源。一切都很棒,除了......

提供者不支持规范实体函数。好吧。然后我查看下面的链接,上面说我应该使用“Teradata.DiffDays”和“EntityFunctions.DiffDays”。

http://developer.teradata.com/doc/connectivity/tdnetdp/14.10/webhelp/EntityProviderCanonicalFunctions.html

因此,我很高兴地尝试在我的 LINQ to Entities 查询中使用“Teradata.DiffDays”:

var 结果 = IMAccts.Where(acct => acct.ACCT_CLSD_DT != null && Teradata.DiffDays(ACCT_OPEN_DT, ACCT_CLSD_DT) >= 90).Dump();

命名空间“Teradata”中不存在类型或命名空间名称“DiffDays”。

但是,我观察到可以在 Entity SQL 中使用相同的 Teradata.DiffDays,如下所示:

选择 Teradata.DiffDays(ACCT_OPEN_DT,ACCT_CLSD_DT) 作为 IMAccts 的差异

我的问题是:

1)“Teradata”命名空间下的函数如何在 Entity SQL 中而不是在 LINQ to Entities 中被识别?

2)我是否可以通过提供我自己的 DateDiff 函数来解决这个问题?(请注意,在本地收集数据然后应用日期操作绝对不是一种选择)

4

1 回答 1

0

关于 Q2:所有这些函数都由驱动程序简单地转换为有效的 Teradata SQL:

select ACCT_OPEN_DT-ACCT_CLSD_DT as diff from IMAccts

我不了解 DateDiff 的规则,因此您可能必须将其更改为 ACCT_CLSD_DT-ACCT_OPEN_DT

于 2013-07-26T08:34:53.560 回答