Estou obtendo uma saída de a DataTable
para determinadas colunas que foram definidas em a string array
:string[] columnsToBeUnique;
var ordered = dataTable1
.AsEnumerable()
.Select(column => columnsToBeUnique.Select(name => column[name]))
.Order()
.ToArray()
;
Sem o , .Order()
estou obtendo a saída desejada. O a saída, no entanto, não é ordenada, então quero ordenar a saída. Quando adiciono o .Order()
, um erro Failed to compare two elements in the array.
é lançado.
Eu também tentei:
var ordered = dataTable1
.AsEnumerable()
.Select(column => columnsToBeUnique.Select(name => column[name]))
.OrderBy(x=>x)
.ToList();
O que estou fazendo errado?
A mensagem de erro que você está recebendo é porque o objeto que você está tentando ordenar é um
IEnumerable<object>
(ou similar) e.NET
não sabe como comparar duas sequências por padrão.Você está selecionando uma sequência de valores por linha (via
columnsToBeUnique.Select(...)
), o que resulta em umIEnumerable<object>
por linha. MasIEnumerable<object>
não implementaIComparable
isso.Order()
ou.OrderBy(x => x)
não sabe como classificá-lo.Resolva isso usando um tipo semelhante:
Junte os valores em uma String:
Use ValueTuple se você souber quantas colunas:
A segunda solução só funcionaria se
columnsToBeUnique
tivesse um número fixo de colunas.