Como obtenho uma lista ordenada e distinta de nomes de um DataTable usando LINQ?

StackOverflow https://stackoverflow.com/questions/59

  •  08-06-2019
  •  | 
  •  

Pergunta

eu tenho um DataTable com um Name coluna.Quero gerar uma coleção de nomes exclusivos ordenados em ordem alfabética.A consulta a seguir ignora o ordenar por cláusula.

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

Por que o orderby não ser aplicado?

Foi útil?

Solução

Para torná-lo mais legível e fácil de manter, você também pode dividi-lo em várias instruções LINQ.

  1. Primeiro, selecione seus dados em uma nova lista, vamos chamá-la x1, faça uma projeção se desejar
  2. Em seguida, crie uma lista distinta, de x1 em x2, usando qualquer distinção necessária
  3. Por fim, crie uma lista ordenada, a partir de x2 em x3, classificando pelo que você deseja

Outras dicas

O problema é que o operador distinto não concede que manterá a ordem original dos valores.

Portanto, sua consulta precisará funcionar assim

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

Experimente o seguinte:

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

Tente o seguinte

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

isso deve funcionar para o que você precisa.

Para abstrair:todas as respostas têm algo em comum.

OrderBy precisa ser a operação final.

Você pode usar algo assim:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top