如何在数据表的每个列中获取最大字符串长度

时间:2009-06-27 20:35:39

标签: c# .net linq datatable max

我有一个DataTable对象。每列都是string类型。

使用LINQ,如何获得每列的最大字符串长度?

2 个答案:

答案 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();