我想这应该很简单,但我找不到怎么做。我有一个 linq 查询,它选择一个 int 类型的列,我需要对其进行排序。
var values = (from p in context.Products
where p.LockedSince == null
select Convert.ToInt32(p.SearchColumn3)).Distinct();
values = values.OrderBy(x => x);
SearchColumn3 是 op 类型的字符串,但 i 只包含整数。所以我想,转换为 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。任何人都可以对此说些有用的东西吗?