views:

1204

answers:

1

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

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

+2  A: 

The maximum string length for the whole table (assuming at least one non-null value there, otherwise, Max will throw an exception):

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 (assuming at least one non-null value in each column, otherwise, Max will throw an 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();
Mehrdad Afshari
That gets the length of the longest string in the whole table.I need the lengths of the longest strings in every column.
Ronnie Overby
@Ronnie: Updated the answer.
Mehrdad Afshari