Como chegar Max Cadeia Comprimento em cada coluna de uma tabela de dados
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?
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