5

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

3

4 Answers 4

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

This will order the rows by the first and the second column

Sign up to request clarification or add additional context in comments.

Comments

3
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.

Comments

3

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

Comments

0

Try comma seperating the order by columns

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.