DataTableオブジェクトがあります。すべての列は文字列型です。
LINQを使用して、すべての列の最大文字列長を取得するにはどうすればよいですか?
テーブル全体の文字列の最大長:
int? maxStringLength = dataTable.AsEnumerable()
.SelectMany(row => row.ItemArray.OfType<string>())
.Max(str => str?.Length);
各列の最大文字列長が必要な場合は、次のようにします。
List<int?> maximumLengthForColumns =
Enumerable.Range(0, dataTable.Columns.Count)
.Select(col => dataTable.AsEnumerable()
.Select(row => row[col]).OfType<string>()
.Max(val => val?.Length)
).ToList();
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();