我想应该很简单,但我找不到如何去做。 我有一个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