Я думаю, это должно быть очень просто, но я не могу найти, как это сделать.
У меня есть запрос 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, но я содержит только целые числа. Поэтому я подумал, что преобразование в 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.
Кто-нибудь может сказать что-нибудь полезное по этому поводу?