Как получить отдельный упорядоченный список имен из 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.08.2008 13:14:33
7 ОТВЕТОВ
РЕШЕНИЕ

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

  1. Во-первых, выберите ваши данные в новый список, давайте назовем его x1, сделайте прогноз, если хотите
  2. Затем создайте четкий список, из x1INTO x2, используя любое различие вам требуется
  3. И, наконец, создать упорядоченный список, из x2в x3, сортировка по что вы желаете
36
14.10.2012 12:22:39

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

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

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
54
19.08.2014 23:17:56
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
10
8.04.2011 15:41:14

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

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
7
28.05.2013 06:08:21

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

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

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

2
14.07.2014 07:44:43

Абстрактно: у всех ответов есть что-то общее.

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

1
30.01.2018 16:19:51

Вы можете использовать что-то вроде этого:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
1
25.06.2018 10:56:10