LINQ to SQL с прямым SQL для скалярного значения - PullRequest
0 голосов
/ 11 мая 2011

Я пытаюсь выполнить следующий необработанный SQL, поскольку LINQ не имеет надлежащей поддержки DateDiff:

var str = @"SELECT ISNULL(AVG(DATEDIFF(DAY, AddedDate, PresentDate)), 0)
              AS Days
                FROM DummyTable";

Используя LINQ to SQL, я пытаюсь получить вывод приведенного выше оператора, используя:

var numberOfDays = Math.Round(db.ExecuteQuery<double>(str).FirstOrDefault());

Это дает мне ошибку: Specified cast is not valid.

Что я делаю не так?

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 11 мая 2011

Ваш код должен измениться на:

var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault());

Думаешь почему? Я говорю вам:

Возвращаемый тип DateDiff в int.So Возвращаемый тип AVG будет int. Поэтому тип возвращаемого значения IsNULL также будет int.

Рекомендации:
DateDiff AVG

IsNull всегда пытается преобразовать тип второго выражения в первое выражение.

0 голосов
/ 11 мая 2011

DATEDIFF() возвращает int. Когда передается коллекция целых чисел, функция AVG() также возвращает целое число. Попробуйте вместо этого код:

    var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault();
0 голосов
/ 11 мая 2011

Хорошо, мой плохой.

Похоже, актерский состав был действительно неправильным ... Изменил строку на:

var numberOfDays = db.ExecuteQuery<int>(str).FirstOrDefault();

И все хорошо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...