Как получить отдельный упорядоченный список имен из 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"]);