2013-07-21 2 views
0

Хорошо. За последние несколько недель я так много работал, чтобы изучить поставщика данных .NET для Teradata и настроить инфраструктуру для запроса источников данных Teradata. Все отлично, за исключением ...Первый идентификатор провайдера Teradata .NET - функции сущности не поддерживаются

Функции Canonical Entity не поддерживаются провайдером. Хорошо. Затем я смотрю ссылку ниже, в которой говорится, что я должен использовать «Teradata.DiffDays» и «EntityFunctions.DiffDays».

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

Я весело попробовать использовать "Teradata.DiffDays" в моем LINQ к Entities запрос таким образом:!

Var результаты = IMAccts.Where (Acct => acct.ACCT_CLSD_DT = нуль & & Teradata .DiffDays (ACCT_OPEN_DT, ACCT_CLSD_DT)> = 90) .Dump();

Тип или имя пространства имен «DiffDays» не существует в пространстве имен «Teradata».

Однако, я замечаю, что одни и те же Teradata.DiffDays могут быть использованы в Entity SQL, как это:

выберите Teradata.DiffDays (ACCT_OPEN_DT, ACCT_CLSD_DT), как дифф от IMAccts

Мои вопросы:

1) Как возможно, что функция под пространством имен Teradata распознается в Entity SQL, а не в LINQ to Entities?

2) Могу ли я обойти это, предоставив свою собственную функцию DateDiff? (Обратите внимание, что сбор данных на местном уровне, а затем применять манипуляцию даты, безусловно, не вариант)

ответ

0

Что касается Q2: Всех этих функций просто переводятся драйвер правомерного Teradata SQL:

select ACCT_OPEN_DT-ACCT_CLSD_DT as diff from IMAccts 

Я не 't знать о правилах для DateDiff, поэтому вам, возможно, придется изменить его на ACCT_CLSD_DT-ACCT_OPEN_DT

+0

Это неверно. У меня есть эти два отображения даты в тип данных .NET «DateTime». Фактически, вычитание дат было первым методом, который я попытался, и ошибка, которую я получил, это «аргументы DbArithmeticExpression должны иметь числовой общий тип». –

+0

К сожалению, провайдер не поддерживает такие собственные инструкции, как вы, возможно, попытаетесь добавить явное преобразование: выберите CAST (ACCT_OPEN_DT-ACCT_CLSD_DT как INT) как diff от IMAccts – dnoeth

+0

Обратите внимание, что поля сопоставляются с типами данных .NET. Проблема заключается не в том, что результат не отличен от целого. Поставщик не в состоянии разрешить вычитание двух дат в первую очередь. Кастинг может даже входить в картину только после распознавания вычитания. Во всяком случае, при попытке применить этот метод в .NET (int) (acct.ACCT_CLSD_DT - acct.ACCT_OPEN_DT) появляется то же сообщение об ошибке. –