Come ottenere la lunghezza massima della stringa in ogni colonna di un datatable
Domanda
Ho un oggetto DataTable. Ogni colonna è di tipo stringa.
Utilizzando LINQ, come posso ottenere la lunghezza massima della stringa per ogni colonna?
Soluzione
La lunghezza massima della stringa per l'intera tabella (presupponendo che vi sia almeno un valore non nullo, altrimenti Max
genererà un'eccezione):
int maxStringLength = dataTable.AsEnumerable()
.SelectMany(row => row.ItemArray.OfType<string>())
.Max(str => str.Length);
Se si desidera la lunghezza massima della stringa per ciascuna , è possibile farlo (assumendo almeno un valore non nullo in ciascuna colonna, altrimenti <=> genererà un'eccezione):
List<int> maximumLengthForColumns =
Enumerable.Range(0, dataTable.Columns.Count)
.Select(col => dataTable.AsEnumerable()
.Select(row => row[col]).OfType<string>()
.Max(val => val.Length)).ToList();
Altri suggerimenti
Con c # 6, puoi prevenire l'eccezione aggiungendo 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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow