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

C# 如何在数据表的每列中获取最大字符串长度,c#,.net,linq,datatable,max,C#,.net,Linq,Datatable,Max,我有一个DataTable对象。每列都是字符串类型 使用LINQ,如何获得每列的最大字符串长度?假设整个表中至少有一个非空值,则Max将抛出异常: int maxStringLength = dataTable.AsEnumerable() .SelectMany(row => row.ItemArray.OfType<string>()) .Max(str

我有一个DataTable对象。每列都是字符串类型


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

假设整个表中至少有一个非空值,则Max将抛出异常:

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

获取整个表中最长字符串的长度。我需要每列中最长字符串的长度。你不是说IEnumerable吗?@roncansan的CCode中未定义可枚举项,这非常有用。但是,如何在var maximumLengthForColumns中获得{ColumnName,MaxLength}对?或者可以保证var maximumLengthForColumns中的MaxLength值与表中的列的顺序完全一致。谢谢