У меня есть столбец SQL varchar со значениями вроде 100, 2000 и S5000. Я хочу, чтобы они были упорядочены по номерам, а не по алфавиту. Если есть строковый символ, я рад, что этот символ либо игнорируется, либо появляется после числовых значений в порядке сортировки.
В T-SQL я мог бы это с:
SELECT * FROM tbl
ORDER BY
CASE
WHEN ISNUMERIC(fld) = 1 THEN CONVERT(INT, fld)
ELSE 2147483647
END ASC,
fld ASC
Мне интересно, есть ли способ сделать это в Linq to SQL?
В противном случае, я полагаю, мои альтернативы - выполнить запрос напрямую или создать вычисляемый столбец со значениями, такими как 00000100, 00002000,000S5000 и т. Д.
Редактировать: я нашел решение, хотя я не уверен, насколько оно эффективно.
from s in q
orderby (SqlMethods.Like(s.fld, "%[^0-9]%") ? Int32.MaxValue : Convert.ToInt32(s.fld)) ascending, s.fld ascending
select s;