我有一个DataTable对象。每列都是string类型。
使用LINQ,如何获得每列的最大字符串长度?
答案 0 :(得分:13)
整个表的最大字符串长度(假设其中至少有一个非空值,否则Max
将抛出异常):
int maxStringLength = dataTable.AsEnumerable()
.SelectMany(row => row.ItemArray.OfType<string>())
.Max(str => str.Length);
如果你想要每个列的最大字符串长度,你可以这样做(假设每列中至少有一个非空值,否则Max
会抛出异常):< / p>
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 :(得分:1)
使用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();