Как получить отдельный упорядоченный список имен из DataTable с использованием LINQ? - PullRequest
93 голосов
/ 01 августа 2008

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

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

Почему orderby не применяется?

Ответы [ 7 ]

52 голосов
/ 01 августа 2008

Проблема в том, что Оператор не дает, что это будет поддерживать первоначальный порядок значения.

Таким образом, ваш запрос должен работать следующим образом

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
32 голосов
/ 04 сентября 2008

Чтобы сделать его более читабельным и обслуживаемым, вы также можете разделить его на несколько операторов LINQ.

  1. Сначала выберите ваши данные в новом списке, назовем его x1, при желании сделайте прогноз
  2. Затем создайте отдельный список, от x1 до x2, используя любое различие, которое вам требуется
  3. Наконец, создайте упорядоченный список из x2 в x3, сортируя по вашему желанию
8 голосов
/ 05 декабря 2008
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
5 голосов
/ 28 апреля 2013

Попробуйте следующее:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
1 голос
/ 07 августа 2008

Попробуйте следующее

var names = (from dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy(name => name);

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

0 голосов
/ 25 июня 2018

Вы можете использовать что-то подобное:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
0 голосов
/ 30 января 2018

Абстрагироваться: у всех ответов есть что-то общее.

OrderBy должен быть последней операцией.

...