Как получить максимальную длину строки в каждом столбце таблицы данных - PullRequest
5 голосов
/ 28 июня 2009

У меня есть объект DataTable. Каждый столбец имеет тип string.

Используя LINQ, как я могу получить максимальную длину строки для каждого столбца?

Ответы [ 2 ]

13 голосов
/ 28 июня 2009

Максимальная длина строки для всей таблицы (при условии, что там есть хотя бы одно ненулевое значение, в противном случае Max сгенерирует исключение):

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

Если вам нужна максимальная длина строки для каждого столбца, вы можете это сделать (если в каждом столбце есть хотя бы одно ненулевое значение, в противном случае Max выдаст исключение):

List<int> maximumLengthForColumns = 
   Enumerable.Range(0, dataTable.Columns.Count)
             .Select(col => dataTable.AsEnumerable()
                                     .Select(row => row[col]).OfType<string>()
                                     .Max(val => val.Length)).ToList();
1 голос
/ 22 ноября 2016

С помощью c # 6 вы можете предотвратить исключение, добавив 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();
...