У меня DataTable с колонкой Name. Я хочу создать коллекцию уникальных имен, упорядоченных в алфавитном порядке. Следующий запрос игнорирует предложение Сортировать по.
var names =
(from DataRow dr in dataTable.Rows
orderby (string)dr["Name"]
select (string)dr["Name"]).Distinct();
Почему orderby не применяется?





Проблема в том, что Distinct оператор не гарантирует, что он будет поддерживать первоначальный порядок значения.
Итак, ваш запрос должен работать так
var names = (from DataRow dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy( name => name );
Попробуйте следующее
var names = (from dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy(name => name);
это должно работать для того, что вам нужно.
Чтобы сделать его более читаемым и поддерживаемым, вы также можете разделить его на несколько операторов LINQ.
x1, при желании сделайте проекциюx1 до x2, используя любое различие, которое вам нужно.x2 до x3, отсортировав все по вашему желанию.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);
Резюмируя: все ответы имеют что-то общее.
OrderBy должен быть последней операцией.
Вы можете использовать что-то вроде этого:
dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);