Pergunta

Eu tenho um objeto DataTable. Cada coluna é do tipo string.

Usando o LINQ, como posso obter o comprimento máximo da string para cada coluna?

Foi útil?

Solução

O comprimento máximo da cadeia para toda a mesa (supondo que, pelo menos, um valor não nulo, caso contrário, Max vai accionar uma excepção):

int maxStringLength = dataTable.AsEnumerable()
                              .SelectMany(row => row.ItemArray.OfType<string>())
                              .Max(str => str.Length);

Se você quiser tamanho máximo da string para cada coluna , você poderia fazer (supondo que pelo menos um valor não nulo em cada coluna, caso contrário, Max irá lançar uma exceção):

List<int> maximumLengthForColumns = 
   Enumerable.Range(0, dataTable.Columns.Count)
             .Select(col => dataTable.AsEnumerable()
                                     .Select(row => row[col]).OfType<string>()
                                     .Max(val => val.Length)).ToList();

Outras dicas

Com c # 6, você pode impedir que a exceção adicionando val? .Length

var maximumLengthForColumns =
                Enumerable.Range(0, dt.Columns.Count)
                .Select(col => dt.AsEnumerable()
                                     .Select(row => row[col]).OfType<string>()
                                     .Max(val => val?.Length )).ToList();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top