【发布时间】:2011-08-25 00:45:31
【问题描述】:
我有一个 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;
【问题讨论】:
-
你可能想看看这个问题:stackoverflow.com/questions/2329580/… - 它应该提供一个开始。
-
您应该将您找到的答案添加为下面的实际答案,如果您愿意,请将其标记为答案,并对您认为有帮助的任何答案进行投票。
标签: .net linq-to-sql