-6

其实我不知道 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

4

2 回答 2

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;
于 2013-05-31T10:41:33.473 回答
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

于 2013-05-31T11:20:06.497 回答