我想應該很簡單,但我找不到如何去做。 我有一個linq查詢,選擇一個int類型的列,我需要它排序。用一列對Linq列表進行排序
var values = (from p in context.Products
where p.LockedSince == null
select Convert.ToInt32(p.SearchColumn3)).Distinct();
values = values.OrderBy(x => x);
SearchColumn3是op類型的字符串,但我只包含整數。所以我想,轉換到Int32和訂購肯定會給我一個很好的1,2,3排序的值列表。但相反,列表保持有序,就像是字符串一樣。
199 20 201
更新: 我已經做了一些測試,與C#代碼和LinqPad。 LinqPad生成以下SQL:
SELECT [t2].[value]
FROM (
SELECT DISTINCT [t1].[value]
FROM (
SELECT CONVERT(Int,[t0].[SearchColumn3]) AS [value], [t0].[LockedSince], [t0].[SearchColumn3]
FROM [Product] AS [t0]
) AS [t1]
WHERE ([t1].[LockedSince] IS NULL)
) AS [t2]
ORDER BY [t2].[value]
我的SQL事件探查說,我的C#代碼生成這一塊的SQL:
SELECT DISTINCT a.[SearchColumn3] AS COL1
FROM [Product] a
WHERE a.[LockedSince] IS NULL
ORDER BY a.[SearchColumn3]
所以它看起來像C#的LINQ代碼只是省略了Convert.ToInt32。 任何人都可以說一些有用的東西嗎?
是否有錯字?...你是排序'diameters'可變但選擇到'values'變量。它應該讀取'diameters = values.OrderBy(x => x);'? –
也許是因爲你正在分揀'直徑'而不是'價值'? –
您正在選擇「值」,但訂購了「直徑」。這只是一個複製編輯問題,或者它是你的實際代碼? – ChrisF