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

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

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

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

Ответ 1

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

  • Сначала выберите свои данные в новый список, позвоните ему x1, при желании сделайте проецирование
  • Затем создайте отдельный список, от x1 до x2, используя любое различие, которое вам требуется.
  • Наконец, создайте упорядоченный список, от x2 до x3, сортируя по желанию

Ответ 2

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

Итак, ваш запрос должен работать следующим образом

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

Попробуйте выполнить

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

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

Ответ 6

Для резюме: у всех ответов есть что-то общее.

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

Ответ 7

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

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