Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort datatable with multi column using LINQ

I have a Datatable contain n columns. I want to sort n columns in the datatable by LINQ but I don't know how to do that. I sorted successfully with 1 columns but I didn't with multi columns

Ex:

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 

How to loop n columns to add in orderby operator.

My problem is user have a array contain name of columns to sort and I need loop a array to add columns name in operator orderby to sort multi column

PS: My English is not good. Sorry

Thanks Nguyen

like image 706
user1186850 Avatar asked Jun 26 '15 15:06

user1186850


2 Answers

To use the dictionary as order definition you can use the following:

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();
like image 73
Steffen Timm Avatar answered Nov 06 '22 14:11

Steffen Timm


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

Could be ThenByAscending. Using a lambda in this situation would be cleaner to read as well.

like image 28
Adam Avatar answered Nov 06 '22 15:11

Adam