Как получить максимальную длину строки в каждом столбце таблицы данных
Вопрос
У меня есть объект 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();
Не связан с StackOverflow