Reputation: 133
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
Upvotes: 5
Views: 20029
Reputation: 91
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();
Upvotes: 3
Reputation: 454
Try comma seperating the order by columns
var Rows = from row in datatable.AsEnumerable()
orderby n1 acsending, n2
select row
Upvotes: 0
Reputation: 2440
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.
Upvotes: 3
Reputation: 91
datatable.AsEnumerable().OrderBy(c => c[0]).ThenBy(c => c[1]);
This will order the rows by the first and the second column
Upvotes: 3