Ошибка Linq to SQL: порядок по выражению может содержать только непостоянные скаляры - PullRequest
2 голосов
/ 22 сентября 2009

Я использую GridView и LinqDataSource для просмотра таблицы категорий. Я установил Gridview, чтобы включить сортировку. Сортировка обычно работает, кроме тех случаев, когда я щелкаю по заголовку столбца «Описание».

"Порядок по выражению может содержать только непостоянные скаляры, порядок которых сопоставим с сервером. Выражение с типом 'NText' не сопоставимо по порядку."

Описание приведено с помощью ntext, но может кто-нибудь объяснить мне, что происходит? почему NText не сортируется, когда nvarchar есть?

Ответы [ 2 ]

3 голосов
/ 22 сентября 2009

SQL Server просто не позволяет упорядочивать по полям NText (см. Также ошибку 420 в списке ошибок SQL Server ). Я предполагаю, что это из соображений эффективности, но я не могу сказать наверняка.

Теперь решение в связанной статье приведено к nvarchar ... но это очевидно довольно сложно сделать в LINQ.

Ваше поле описания обязательно должно быть ntext?

1 голос
/ 17 октября 2014

Я нажимал на этот вопрос дюжину раз и наконец нашел ответ на него. @neo ответила здесь.

Мой пример SQL раньше:

SELECT * 
FROM [tblRoom]
WHERE [Building] = <%= bldgdbid %>
AND [Floor] LIKE CAST('<%= flr %>' AS NVARCHAR(127))
ORDER BY CAST([RoomName] AS NVARCHAR(255))

который я превратил в этот запрос LINQ:

(From zz In tblRooms
 Where zz.Building = bldgdbid
 Select zz
 ).Where(Function(x) Convert.ToString(x.Floor).ToLower() = flr.ToLower()
 ).OrderBy(Function(y) Convert.ToString(y.RoomName))

, который генерирует LINQPad:

SELECT [t0].[DBID], [t0].[Building], [t0].[ID], [t0].[Floor], [t0].[RoomName]
WHERE (LOWER(CONVERT(NVarChar(MAX),[t0].[Floor])) = @p0) AND ([t0].[Building] = @p1)
ORDER BY CONVERT(NVarChar(MAX),[t0].[RoomName])

поэтому он использует CONVERT, а не CAST, но для меня этого достаточно! И это должно быть достаточно для вас, потому что CAST - это ANSI, а CONVERT - это специфический для SQL Server, но более мощный.

Это чертовски неаккуратно, но я перехожу на Entity Framework, и все LINQ проще.

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