【问题标题】:LINQ order-by issueLINQ 排序问题
【发布时间】:2013-07-11 20:42:13
【问题描述】:

我对 LINQ 有一个奇怪的问题。

我有一个需要按 4 列排序的表……总共 8 列。 此表中的行是按时间顺序排列的(按日期时间排序)。

假设表中的 8 个列是 A、B、C、D、E、F、G、H

我需要按 F、E、D、B 排序的表格

F=> 字符串

E=> 字符串

D=> 字符串

B=> 日期时间

我已经编写了以下 LINQ-

List<Rows> OrderedListOfRows = listOfRows.OrderBy(i => i.F).ThenBy(i=>i.E).ThenBy(i=>i.D).ThenBy(i=>i.B);

我正在对该序列执行操作,并获得所需的结果。但是,我注意到了一个错误。

如果我的 D 示例输入行是“input1”、“input2”、“input3”.....“input10”、“input11”

orderby 函数将条目排序为:“input1”、“input10”、“input11”、“input2”、“input3”...因为 D 是一个字符串。

但是我希望保留原始订单(如果我没有“input10”、“input11”等,这不是问题......

我如何做到这一点?

提前致谢

附:我已尽力解释这个问题。如果还有什么,请给我留言。

编辑:我解决了这个问题。我将新列表与该列上的旧列表一起加入,以便保留我的订单。这未在任何建议的“重复”问题中发布。

【问题讨论】:

    标签: .net sql linq c#-4.0 sql-order-by


    【解决方案1】:

    如果你想按字符串中的数字排序,你可以试试这个:

    int MyOrderBy(string str)
    {
      Regex reg=new Regex("\\d+");
      Match m=reg.Match(str);
      if(m.Success) return int.Parse(m.Value);
      else return int.MinValue;
    }
    

    然后排序:

        List<Rows> OrderedListOfRows = listOfRows.OrderBy(i => MyOrderBy(i.F))
                                                 .ThenBy(i=>MyOrderBy(i.E))
                                                 .ThenBy(i=>MyOrderBy(i.D))
                                                 .ThenBy(i=>i.B).ToList();
    

    【讨论】:

      【解决方案2】:

      如果您在 D 中有可预测的条目,您可以按如下方式解析字符串:

      List<Rows> OrderedListOfRows = listOfRows
        .OrderBy(i => i.F)
        .ThenBy(i=>i.E)
        .ThenBy(i=>i.D.Substring(0,5))
        .ThenBy(i=>Convert.ToInt16(i.D.Substring(6)))
        .ThenBy(i=>i.B);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        • 2021-06-05
        相关资源
        最近更新 更多