Как получить отдельный упорядоченный список имен из DataTable с помощью LINQ?

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

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

Почему orderby не исполняется?

Ответов (7)

Решение

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

  1. Сначала выберите ваши данные в новый список, давайте назовем его x1, при желании сделайте проекцию
  2. Затем создайте отдельный список от x1в x2, используя любое различие, которое вам нужно.
  3. И, наконец, создать упорядоченный список, из x2в x3, сортировка по что вы желаете
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);

Вы можете использовать что-то вроде этого:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);

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

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

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

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

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

Итак, ваш запрос должен работать так

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

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

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

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