2008-08-01 1 views
80

У меня есть DataTable с колонкой Name. Я хочу создать коллекцию уникальных имен, упорядоченных по алфавиту. Следующий запрос игнорирует заказ по пункту.Как получить отдельный упорядоченный список имен из DataTable с помощью LINQ?

var names = 
    (from DataRow dr in dataTable.Rows 
    orderby (string)dr["Name"] 
    select (string)dr["Name"]).Distinct(); 

Почему нет orderby?

ответ

29

Чтобы сделать его более читабельным и обслуживаемым, вы также можете разбить его на несколько операторов LINQ.

  1. Во-первых, выберите ваши данные в новый список, давайте назовем его x1, сделать прогноз, если желаемый
  2. Затем создайте четкий список, из x1 в x2, используя любое различие вам требуется
  3. Наконец , создать упорядоченный список, из x2 в , сортировка по что вы желаете
50

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

Таким образом, ваш запрос нужно будет работать, как этот

var names = (from DataRow dr in dataTable.Rows 
      select (string)dr["Name"]).Distinct().OrderBy(name => name); 
1

Попробуйте следующее

var names = (from dr in dataTable.Rows 
      select (string)dr["Name"]).Distinct().OrderBy(name => name); 

это должно работать на то, что вам нужно.

7
var sortedTable = (from results in resultTable.AsEnumerable() 
select (string)results[attributeList]).Distinct().OrderBy(name => name); 
3

Попробуйте FO llowing:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name); 
0

Резюме: все ответы имеют что-то общее.

OrderBy должен быть окончательной операцией.

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