Как получить отдельный упорядоченный список имен из 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.
- Во-первых, выберите ваши данные в новый список, давайте назовем его
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);
это должно работать на то, что вам нужно.
Вы можете использовать что-то вроде этого:
dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Абстрактно: у всех ответов есть что-то общее.
OrderBy должен быть последней операцией.