Сведения о вопросе

Fhohir

16:03, 1st July, 2020

Теги

c#   linq   .net-3.5    

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

Просмотров: 470   Ответов: 7

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

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

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



  Сведения об ответе

#hash

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

DINO

18:03, 1st July, 2020

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

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


  Сведения об ответе

Chhiki

18:03, 1st July, 2020

var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);


  Сведения об ответе

$DOLLAR

18:03, 1st July, 2020

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

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);


  Сведения об ответе

piter

18:03, 1st July, 2020

Попробовать следующее

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

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


  Сведения об ответе

9090

18:03, 1st July, 2020

Чтобы абстрагироваться: все ответы имеют что-то общее.

OrderBy должна быть заключительной операцией.


  Сведения об ответе

lesha

18:03, 1st July, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться