Как получить отдельный упорядоченный список имен из 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сортировка по вашему желанию

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

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

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

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

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

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

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

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

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

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

Абстрактно: у всех ответов есть что-то общее.

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

Другие вопросы по тегам