好的。在過去的幾周裏,我非常努力地學習了Teradata的.NET數據提供程序,並設置了查詢Teradata數據源的基礎結構。一切都很好,除了....Teradata .NET提供商代碼第一次失敗 - 不支持實體功能
規範實體功能不提供支持。好的。然後我看看下面的鏈接,我應該使用「Teradata.DiffDays」和「EntityFunctions.DiffDays」。
我歡快地嘗試查詢實體正是如此使用 「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函數來解決這個問題嗎? (請注意,在本地收集數據,然後將日期操控絕對不是一個選項)
這是不正確的。我有這兩個日期映射到.NET數據類型「DateTime」。事實上,減去日期是我嘗試的第一種方法,而我得到的錯誤是「DbArithmeticExpression參數必須具有數字通用類型」。 –
糟糕,似乎提供程序不支持這樣的本機語句,您可能嘗試添加顯式類型轉換:從IMAccts中選擇CAST(ACCT_OPEN_DT-ACCT_CLSD_DT,作爲差異) – dnoeth
請注意,這些字段已映射到.NET數據類型。問題不在於結果不是轉換爲整數。提供者不能允許首先減去兩個日期時間。只有在減法被識別後,投射才能進入畫面。無論如何,以.NET方式(int)(acct.ACCT_CLSD_DT - acct.ACCT_OPEN_DT)嘗試這種轉換會產生相同的錯誤消息。 –