获取 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
我的目标是将 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