【问题标题】:Sort dropdown list in Alpha Numeric order按字母数字顺序对下拉列表进行排序
【发布时间】:2015-02-02 13:08:21
【问题描述】:

我有一个 asp 下拉列表控件,数据绑定到一个 sql 数据库。它接收的值如下所示:

S1
S10
S10A
S10B
S10C
S1A
S1B
S1C
S1D

但我需要它先按字母排序,然后按数字排序,但要包括最后一个字母(如果有的话)。所以输出应该是这样的:

S1
S1A
S1B
S1C
S1D
S10
S10A
S10B
S10C

我可以在 select 语句中执行 ORDER BY,但这并不能解决问题。

【问题讨论】:

标签: c# asp.net sql-server sorting natural-sort


【解决方案1】:

我还没有完全调试和检查它,所以它可能包含一些错误, 但总体思路是从集合中的字符串中取出所有三个排序参数:

  1. 首字母 - 字符串排序。

  2. 数字 - 数字排序。

  3. 最后一个字母 - 字符串排序。

然后创建一个包含所有三个的对象并进行相应的排序。

    var items = new List<string> { "S1", "S10", "S10A", "S10B", "S10C", "S1A", "S1B", "S1C", "S1D" };

    var result = items.
        Select(o =>
        {
            var firstLetter = o[0];

            int lastLetterNumber;
            var lastChar = o[o.Length - 1].ToString();
            var lastLetterForSort = Int32.TryParse(lastChar, out lastLetterNumber) ? string.Empty : lastChar;

            var number = o.Substring(1,  lastLetterForSort.Equals(string.Empty) ? o.Length - 1 : o.Length - 2);

            return new { 
                FirstLetter = firstLetter  , 
                Number = Int32.Parse( number) , 
                LastLetter = lastLetterForSort , 
                Value = o
            };
        }).
        OrderBy(o => o.FirstLetter).
        ThenBy(o => o.Number).
        ThenBy(o => o.LastLetter).
        Select(o => o.Value).
        ToList();

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2013-05-02
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多