私はそれが本当に簡単であるべきだと思いますが、それを行う方法が見つかりません。int 型の 1 つの列を選択する 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 タイプの文字列ですが、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 を省略しているように見えます。誰かがこれについて有益なことを言うことができますか?