2014-09-25 7 views
0

Я получаю коллекцию записей в DataTable и привязываю ее к элементу управления сеткой. Прежде чем привязать его, я сортирую данные на основе нескольких условий. Для краткости я объясню тестовый сценарий.DataTable - Dynamic Linq OrderBy с использованием выражений Lambda

У меня есть два поля Категория и страна. Я хочу сначала отсортировать записи по категориям, а затем по странам. Но улов здесь - это то, что я хочу довести все значения пустой категории до конца, а затем сортировать в соответствии с алфавитным порядком.

Для этого я делаю -

var rows = dt.AsEnumerable() 
     .OrderBy(r => string.IsNullOrEmpty(Convert.ToString(r["Category"]))) //push empty values to bottom 
     .ThenBy(r => Convert.ToString(r["Category"])) 
     .ThenBy(r => Convert.ToString(r["Country"])) 

Но теперь, поля, на основании которых мне нужно разобраться, является динамическим, который я имею в массиве.

Как я могу использовать лямбда-выражения для динамического упорядочивания записей на основе полей? (нажатие пустых значений до конца)

ответ

1

Я предполагаю, что массив, о котором вы говорите, представляет собой массив строк.

var columns = new string[] { "Category", "Country" }; 

var rows = dt.AsEnumerable().OrderBy(x => 0); 
foreach(var columnName in columns) 
{ 
    rows = rows.ThenBy(r => string.IsNullOrEmpty(Convert.ToString(r[category]))) 
       .ThenBy(r => Convert.ToString(r[category])); 
} 

Поскольку LINQ использует отложенное выполнение, ваш запрос не будет оцениваться до тех пор, пока вам не понадобятся результаты. Вот почему вы можете построить его на нескольких этапах, как в приведенном выше примере.

+0

Perfect. Я пробовал это уже, но по какой-то причине я получал ошибку sytax рядом с ThenBy. Теперь все в порядке. – NLV

Смежные вопросы