Выполнить аналог () аналог в пользовательском запросе Linq to Sql - PullRequest
3 голосов
/ 21 марта 2011

Мне нужно выполнить пользовательский SQL-запрос, который я не могу сделать с обычными средствами L2S:

select [row_number] from (select row_number() over (order by CreatedOn desc, ID desc) as [row_number], ID from MyTable) as T1 where ID = {0}

так что я пытаюсь

var r = db.ExecuteQuery<int>(q, id).Single();

, но это не работает (получение System.InvalidCastException: указанное приведение недействительно). Есть предложения?

Ответы [ 2 ]

7 голосов
/ 21 марта 2011

Измените код на:

var r = db.ExecuteQuery<long>(q, id).Single();

, изменив тип возвращаемого значения с System.Int32 (int) на System.Int64 (long).

T-SQLФункция ROW_NUMBER тип возврата bigint, а не int, как вы ожидали.

0 голосов
/ 31 июля 2013

вы можете попробовать изменить код с

int recordsAffected = SqlDBUtils.GetInt(dr, "SerialNumber");

на

int recordsAffected = SqlDBUtils.GetInt64(dr, "SerialNumber");

, поскольку функция ROW_NUMBER() в SQL возвращает BigInt вместо Int

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