2013-07-21 56 views
0

好的。在過去的幾周裏,我非常努力地學習了Teradata的.NET數據提供程序,並設置了查詢Teradata數據源的基礎結構。一切都很好,除了....Teradata .NET提供商代碼第一次失敗 - 不支持實體功能

規範實體功能不提供支持。好的。然後我看看下面的鏈接,我應該使用「Teradata.DiffDays」和「EntityFunctions.DiffDays」。

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

我歡快地嘗試查詢實體正是如此使用 「Teradata.DiffDays」 在我的LINQ:

VAR的結果= IMAccts.Where(ACCT => acct.ACCT_CLSD_DT = NULL & &的Teradata .DiffDays(ACCT_OPEN_DT,ACCT_CLSD_DT)> = 90).Dump();

名稱空間「Teradata」中不存在類型或命名空間名稱「DiffDays」。

不過,我觀察到同樣的Teradata.DiffDays可以在實體SQL中使用這樣的:

選擇Teradata.DiffDays(ACCT_OPEN_DT,ACCT_CLSD_DT)從IMAccts

我的問題是DIFF:

1)「實體數據」名稱空間下的函數如何在Entity SQL中識別,而不是在LINQ to Entities中識別?

2)我可以通過提供我自己的DateDiff函數來解決這個問題嗎? (請注意,在本地收集數據,然後將日期操控絕對不是一個選項)

回答

0

關於Q2:

select ACCT_OPEN_DT-ACCT_CLSD_DT as diff from IMAccts 

我不: 所有這些功能都簡單地通過驅動程序將有效Teradata的SQL轉換不知道DateDiff的規則,因此您可能必須將其更改爲ACCT_CLSD_DT-ACCT_OPEN_DT

+0

這是不正確的。我有這兩個日期映射到.NET數據類型「DateTime」。事實上,減去日期是我嘗試的第一種方法,而我得到的錯誤是「DbArithmeticExpression參數必須具有數字通用類型」。 –

+0

糟糕,似乎提供程序不支持這樣的本機語句,您可能嘗試添加顯式類型轉換:從IMAccts中選擇CAST(ACCT_OPEN_DT-ACCT_CLSD_DT,作爲差異) – dnoeth

+0

請注意,這些字段已映射到.NET數據類型。問題不在於結果不是轉換爲整數。提供者不能允許首先減去兩個日期時間。只有在減法被識別後,投射才能進入畫面。無論如何,以.NET方式(int)(acct.ACCT_CLSD_DT - acct.ACCT_OPEN_DT)嘗試這種轉換會產生相同的錯誤消息。 –

相關問題