如何从字符串中提取数字并使用linq排序?

时间:2013-05-31 10:36:05

标签: c# linq

实际上我不知道LINQ

我有以下数据
201305PAR60
201305PAR3
201306PAR4

201305PAR7
201305PAR8
201305PAR9
201305PAR10
201312PAR50


产量

201305PAR3
201306PAR4
201305PAR7
201305PAR8
201305PAR9
201305PAR10
201312PAR50
201305PAR60

并根据最后一位数

对这些数据进行排序

即 201305PAR 3
201306PAR的 4
201305PAR的 7
201305PAR的 8
201305PAR的 9
201305PAR的 10
201312PAR的 50
201305PAR的 60

2 个答案:

答案 0 :(得分:3)

var result1 = from s in strings
              select new
              {
                 Original = s,
                 Sort = s.Substring(s.IndexOf("PAR") + 3),
              }

var result2 = from r in result1
              orderby r.Sort
              select r.Original;

当然这可以简化一点

var result = from s in strings
             orderby int.Parse(s.Substring(s.IndexOf("PAR") + 3))
             select s;

答案 1 :(得分:1)

这并没有直接回答这个问题,但如果您希望解决方案易于维护和扩展,您可能需要考虑为这些创建一个类。

public class Par
{
    public DateTime Date { get; private set; }
    public int Index { get; private set; }

    public Par(string input)
    {
        // define 'Date' using the first 6 chars of input
        // define 'Index' using @SchlaWiener's method
    }
}

之后您可以轻松地执行此操作:

var result = from par in myParList
             orderby par.Date, par.Index
             select par;

会对此进行排序:
2013的 01 PAR2
2013的 02 的PAR1
2013的 01 PAR1

到此:
2013的 01 的PAR1
2013的 01 PAR2
2013的 02 PAR1

或者您可以使用orderby par.Index, par.Date来实现此目的:
201301PAR的 1
201302PAR的 1
201301PAR 2