我正在使用GridView和LinqDataSource查看Categories表。我將Gridview設置爲啓用排序。除了當我點擊Description列的標題時,排序通常是有效的。 「Linq to SQL錯誤:按表達式排序只能包含非常量標量
」按表達式的順序只能包含服務器可以比較的非常量標量,而類型爲「NText」的表達式不具有順序可比性。
描述是鑄造的ntext,但有人可以向我解釋發生了什麼?爲什麼在nvarchar時NText不可排序?
我正在使用GridView和LinqDataSource查看Categories表。我將Gridview設置爲啓用排序。除了當我點擊Description列的標題時,排序通常是有效的。 「Linq to SQL錯誤:按表達式排序只能包含非常量標量
」按表達式的順序只能包含服務器可以比較的非常量標量,而類型爲「NText」的表達式不具有順序可比性。
描述是鑄造的ntext,但有人可以向我解釋發生了什麼?爲什麼在nvarchar時NText不可排序?
SQL Server just doesn't let you order by NText fields(另請參閱SQL Server Error List中的錯誤420)。我的猜測是出於效率原因,但我無法肯定地說。
現在,鏈接文章中的解決方案被轉換爲nvarchar
......但是在LINQ中這顯然很難做到。
您的描述字段是否必須是ntext
?
我已經點擊了這個問題十幾次,終於找到了答案。 @ neo的回答是here.
我的例子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特有的,但功能更強大。
它看起來馬虎,但我正在轉向實體框架和所有的LINQ更容易。
不行。我只是想知道發生了什麼。謝謝瓊!你差不多達到100,000分! – burnt1ce