Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get Max String Length in every Column of a Datatable

I have a DataTable object. Every column is of type string.

Using LINQ, how can I get the maximum string length for every column?

like image 608
Ronnie Overby Avatar asked Jun 27 '09 20:06

Ronnie Overby


2 Answers

The maximum string length for the whole table:

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

If you want maximum string length for each column, you could do:

List<int?> maximumLengthForColumns = 
   Enumerable.Range(0, dataTable.Columns.Count)
       .Select(col => dataTable.AsEnumerable()
            .Select(row => row[col]).OfType<string>()
            .Max(val => val?.Length)
       ).ToList();
like image 125
mmx Avatar answered Sep 21 '22 02:09

mmx


With c# 6, you can prevent the exception by adding 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();
like image 24
roncansan Avatar answered Sep 24 '22 02:09

roncansan