Как получить максимальную длину строки в каждом столбце таблицы данных

StackOverflow https://stackoverflow.com/questions/1053560

Вопрос

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

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

Это было полезно?

Решение

Максимальная длина строки для всей таблицы (при условии, что там есть хотя бы одно ненулевое значение, в противном случае 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();

Другие советы

С С# 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top