我有一个客户端提供的数据表,其中包含一组组代码。在第1组中,我有1,2,3,4,5,6,7,8,9,10,还有1A,2A等等。
数据类型当前是varchar(10),客户端希望排序顺序如下: 1 2 3 4 五 6 7 8 9 10 1A 2A ...
但它出来了: 1 10 1A 2 2A 3 4 五 6 7 8 9 ...
有什么方法可以让我以正确的顺序出来吗?
答案 0 :(得分:1)
您确定此列中的仅数字(十六进制格式,但无关紧要)?如果是,则最好更改表结构和存储号本身(并将其格式化仅用于查看/编辑)。在这种情况下,可以在服务器端轻松执行排序(我的意思是DB服务器)。
答案 1 :(得分:0)
通常,您可以通过将字符串解析为数字并指定System.Globalization.NumberStyles.AllowHexSpecifier
来实现此目的。
由于这是LINQ to SQL,因此不会有翻译。因此,您需要在完成查询的其余部分后应用排序,并立即通过AsEnumerable
或ToList
执行排序。请记住,通过这样做,查询请求的所有匹配数据都将被发送到客户端,因此重要的是先前过滤然后在客户端应用排序。
您的查询与此类似:
dc.Table
.Select(o => o.Number) // where number is the property/column name
.AsEnumerable()
.OrderBy(s => Int32.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier))
以下是没有LINQ to SQL的实例:
string[] numbers = { "1", "10", "1A", "2", "2A", "3", "4", "5", "6", "7", "8", "9" };
var query = numbers.OrderBy(s => Int32.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier));
foreach (var s in query)
Console.WriteLine(s);