如何排序(1,11,12,2,全部,其他)到(全部,1,2,11,12,其他)?

Her*_*ero 1 c# sorting


我有一个组合框来显示我的数据库中的数据(varchar).数据总是"1,2,3,4,其他",当我显示数据时,它排序如下:

1
10
11
12
2
3
4
All
Others
Run Code Online (Sandbox Code Playgroud)

如何使下拉看起来像:

All
1
2
3
4
10
11
12
Others
Run Code Online (Sandbox Code Playgroud)

要么

在SQL中我尝试在ORDER BY CAST(priorityNum AS UNSIGNED INTEGER)之后添加All并添加Other到我的数据表结果中.但是如何设置AllOthers始终是第一个也是最后一个?

Edu*_*ual 6

只要您的集合是一个IEnumerable,您就可以OrderBy使用自定义比较器方法调用.你的比较器看起来像这样:

class myStringComparer: IComparer<string> {
    public int Compare(string a, string b) {
        if (a == b) return 0;
        if (a == "All" || b == "Others") return -1;
        if (a == "Others" || b == "All") return 1;
        return int.Parse(a) - int.Parse(b);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果发现意外数据(除"全部","其他"或数字之外的任何其他内容),这将只会抛出异常.您可能希望在尝试整数解析之前添加其他逻辑.

现在,您可以呼叫.OrderBy(new myStringComparer())您的列表/集合.请注意,OrderBy只能用于IEnumerable对象(这包括您可以放在foreach循环上的任何内容,例如数组,列表等).