【问题标题】:How to sort datatable with multi column using LINQ如何使用 LINQ 对多列数据表进行排序
【发布时间】:2015-06-26 15:40:56
【问题描述】:

我有一个包含 n 列的数据表。我想通过 LINQ 对数据表中的 n 列进行排序,但我不知道该怎么做。我用 1 列成功排序,但没有用多列排序

例如:

Dictionary<string, string> dict = Dictionary<string, string>
dict.Add("column_1", "asc");
dict.Add("column_2", "asc");
dict.Add("column_3", "asc");
...
dict.Add("column_n", "asc");
var Rows = from row in datatable.AsEnumerable()
           orderby n1 acsending  (I need loop to add all columns in Dictionary here to sort multi columns)
           select row 

如何循环 n 列以添加到 orderby 运算符中。

我的问题是用户有一个包含要排序的列名的数组,我需要循环一个数组以在运算符 orderby 中添加列名以对多列进行排序

PS:我的英文不好。对不起

谢谢 阮

【问题讨论】:

标签: c# linq sorting datatable


【解决方案1】:
datatable.AsEnumerable().OrderBy(c => c[0]).ThenBy(c => c[1]);

这将按第一列和第二列对行进行排序

【讨论】:

    【解决方案2】:
    list.OrderBy(x => x.att1).ThenByDescending(x => x.att2);
    

    可能是ThenByAscending。在这种情况下使用 lambda 也会更清晰。

    【讨论】:

      【解决方案3】:

      要将字典用作订单定义,您可以使用以下内容:

      Dictionary<string, string> dict = new Dictionary<string, string>();
      dict.Add("col1", "asc");
      dict.Add("col2", "desc");
      
      DataTable datatable = new DataTable();
      datatable.Columns.Add("col1");
      datatable.Columns.Add("col2");
      datatable.Rows.Add(new[] {"a", "1"});
      datatable.Rows.Add(new[] {"b", "2"});
      datatable.Rows.Add(new[] {"a", "5"});
      
      datatable.DefaultView.Sort = 
                        String.Join(",", dict.Select(x => x.Key + " " + x.Value).ToArray());
      datatable = datatable.DefaultView.ToTable();
      

      【讨论】:

        【解决方案4】:

        尝试用逗号按列分隔顺序

        var Rows = from row in datatable.AsEnumerable()
               orderby n1 acsending, n2
               select row 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多