Domanda

Ho un oggetto DataTable. Ogni colonna è di tipo stringa.

Utilizzando LINQ, come posso ottenere la lunghezza massima della stringa per ogni colonna?

È stato utile?

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
scroll top