Question

J'ai un objet DataTable. Chaque colonne est de type chaîne.

Avec LINQ, comment puis-je obtenir la longueur maximale de chaîne pour chaque colonne?

Était-ce utile?

La solution

La longueur de chaîne maximale pour la table entière (en supposant qu'il y ait au moins une valeur non nulle, sinon, Max lève une exception):

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

Si vous souhaitez une longueur de chaîne maximale pour chaque colonne , vous pouvez le faire (en supposant qu'au moins une valeur non nulle dans chaque colonne, sinon, <=> lève une exception):

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

Autres conseils

Avec c # 6, vous pouvez empêcher l’exception en ajoutant 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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top