2015-06-26 3 views
1

У меня есть Datatable, содержащий n столбцов. Я хочу сортировать n столбцов в datatable LINQ, но я не знаю, как это сделать. Я успешно отсортирован с 1 столбцами, но я не делал с несколькими колоннамиКак сортировать данные с несколькими столбцами, используя LINQ

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 

Как петля п столбцов, чтобы добавить в операторе OrderBy.

Моя проблема в том, пользователь имеет массив содержит имя столбцов для сортировки и мне нужно петлевой массив, чтобы добавить имя столбцов в операторной OrderBy сортировать несколько столбцов

PS: Мой английский не очень хорошо. К сожалению

Благодаря Нгуен

+0

возможно дубликат [Multiple «порядок» в LINQ] (http://stackoverflow.com/questions/298725/multiple-order-by-in-linq) –

+0

Я прокомментировал подробности о моей проблеме. Пожалуйста, помогите мне решить его. – user1186850

+0

Возможный дубликат [Как отсортировать данные по двум столбцам в C#] (http://stackoverflow.com/questions/16302901/how-to-sort-datatable-by-two-columns-in- с-диез) – Sometowngeek

ответ

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

Это прикажет строк по первой и второй колонке

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

Может быть ThenByAscending. Использование лямбда в этой ситуации было бы чище и для чтения.

0

Try запятая разделяющей заказ по столбцам

var Rows = from row in datatable.AsEnumerable() 
     orderby n1 acsending, n2 
     select row 
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(); 
Смежные вопросы