Как мне получить отдельный упорядоченный список имен из DataTable с помощью LINQ?
Вопрос
У меня есть DataTable
с помощью Name
колонна.Я хочу сгенерировать коллекцию уникальных имен, упорядоченных в алфавитном порядке.Следующий запрос игнорирует заказать по оговорка.
var names =
(from DataRow dr in dataTable.Rows
orderby (string)dr["Name"]
select (string)dr["Name"]).Distinct();
Почему этот orderby
не подвергаться принудительному исполнению?
Решение
Чтобы сделать его более читаемым и обслуживаемым, вы также можете разбить его на несколько инструкций LINQ.
- Сначала выберите ваши данные в новый список, давайте назовем его
x1
, сделайте проекцию , если это необходимо - Затем создайте отдельный список из
x1
вx2
, используя любое различие , которое вам требуется - Наконец, создайте упорядоченный список из
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"]);