Как получить отчетливый, упорядоченный список имен из DataTable с помощью LINQ?

голоса
83

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

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

Почему orderbyне получить в обязательном порядке?

Задан 01/08/2008 в 14:14
источник пользователем
На других языках...                            


7 ответов

голоса
51

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

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

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
Ответил 01/08/2008 в 14:18
источник пользователем

голоса
30

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

  1. Во- первых, выберите ваши данные в новый список, давайте назовем это x1, сделать проекцию при желании
  2. Затем создайте четкий список, из x1в x2, используя любое различие вам требуется
  3. И, наконец, создать упорядоченный список, из x2в x3, сортировка по что вы желаете
Ответил 04/09/2008 в 03:57
источник пользователем

голоса
8
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
Ответил 05/12/2008 в 02:08
источник пользователем

голоса
5

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

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
Ответил 28/04/2013 в 10:27
источник пользователем

голоса
1

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

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

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

Ответил 07/08/2008 в 03:35
источник пользователем

голоса
0

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

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Ответил 25/06/2018 в 10:56
источник пользователем

голоса
0

Для реферата: все ответы есть что-то общее.

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

Ответил 30/01/2018 в 16:19
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more