获取 DataTable 的每个字段的最大长度

Get the max length for each field of a DataTable

我的目标是将 DataTable 的全部内容显示到 RichTextBox 中,所以我考虑使用 String.Format 来制作列,但我需要知道内容的最大长度对于每一列。

我在 SO 上找到了以下 C# 代码,但我无法将其翻译成 VB.Net:

List<int> maximumLengthForColumns = Enumerable.Range(0, dataTable.Columns.Count)
                                   .Select(col => dataTable.AsEnumerable()
                                   .Select(row => row[col]).OfType<string>()
                                   .Max(val => val.Length)).ToList();

任何关于实现我的目标的不同(更简单或更好)方法的提示都将受到赞赏。

应该是这样的:

Dim maximumLengthForColumns As List(Of Integer) = Enumerable.Range(0, DataTable.Columns.Count).[Select](Function(col) dataTable.AsEnumerable().[Select](Function(row) row(col)).OfType(Of String)().Max(Function(val) val.Length)).ToList()

格式化后的代码如下(为了方便阅读):

Dim maximumLengthForColumns As List(Of Integer) = Enumerable.Range(0, dataTableDataTable.Columns.Count)
                                                 .[Select](Function(col) dataTable.AsEnumerable()
                                                 .[Select](Function(row) row(col))
                                                 .OfType(Of String)().Max(Function(val) val.Length)).ToList()
'dtb is the datatable'
Dim lstMaxLen As New List(Of Integer)
For Each dcl As DataColumn In dtb.Columns
  Dim intMaxLen As Integer = 0
  For Each drw As DataRow In dtb.Rows
    If drw(dcl.ColumnName).ToString.Length > intMaxLen Then
      intMaxLen = drw(dcl.ColumnName).ToString.Length
    End If
  Next drw
  lstMaxLen.Add(intMaxLen)
Next dcl