如何使用LINQ对多列数据表进行排序

时间:2015-06-26 15:40:56

标签: c# linq sorting datatable

我有一个数据表包含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:我的英语不好。遗憾

由于 阮

4 个答案:

答案 0 :(得分:2)

list.OrderBy(x => x.att1).ThenByDescending(x => x.att2);

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

答案 1 :(得分:1)

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

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();

答案 2 :(得分:0)

datatable.AsEnumerable().OrderBy(c => c[0]).ThenBy(c => c[1]);

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

答案 3 :(得分:0)

尝试按列分隔顺序的逗号

tx1