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

StackOverflow https://stackoverflow.com/questions/59

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

Почему этот orderby не подвергаться принудительному исполнению?

Это было полезно?

Решение

Чтобы сделать его более читаемым и обслуживаемым, вы также можете разбить его на несколько инструкций 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);

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

Абстрагироваться:все ответы имеют нечто общее.

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

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

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top