用于替换数据表行中所有出现的字符串的 Lambda 函数



>我有这个:

Public Sub AssignDT(data_tables As Dictionary(Of String, DataTable))        
Dim ApplicationDT = data_tables("Application")
End Sub

现在,此数据表包含一些值为大写字符串"FALSE"或"TRUE"的列。是否有一个 lambda 函数可用于将所有这些值替换为 c# 或 vb .net 中的小写对应方?

在 Python 中,对于数据帧,我像这样得到它,使用数据帧的字典和替换函数:

booleanDictionary = {'TRUE': 'true', "FALSE":   'false'} 
Application = data_frames['Application'].astype(object).replace(np.nan, 
'').replace(booleanDictionary)

尝试这样的事情:

Friend Module Main
Public Sub Main()
Dim oCol As DataColumn
Dim oRow As DataRow
Using oTable As New DataTable
oCol = New DataColumn
oTable.Columns.Add(oCol)
oRow = oTable.NewRow
oRow(0) = "FALSE"
oTable.Rows.Add(oRow)
Console.WriteLine(oRow(0))
oTable.Select.ToList.ForEach(Sub(Row) Row(0) = CStr(Row(0)).ToLower)
Console.WriteLine(oRow(0))
End Using
Console.Read()
End Sub
End Module

输出:

FALSE
false

--编辑--

如果我们没有关于列的信息,我们可以遍历行的项目并测试我们需要的值。

Friend Module Main
Public Sub Main()
Dim oColumns As List(Of DataColumn)
Dim oRows As List(Of DataRow)
Dim oRow As DataRow
Using oTable As New DataTable
oTable.Columns.Add(New DataColumn("Weight", GetType(Integer)))
oTable.Columns.Add(New DataColumn("IsHeavy", GetType(String)))
oRow = oTable.NewRow
oRow(0) = 123
oRow(1) = "False"
oTable.Rows.Add(oRow)
oColumns = oTable.Columns.Cast(Of DataColumn).Where(Function(Column) Column.DataType = GetType(String)).ToList
Console.WriteLine(oRow(1))
oRows = oTable.Select.ToList
oRows.ForEach(Sub(Row)
oColumns.ForEach(Sub(Column)
If Boolean.TryParse(oRow(Column.Ordinal), Nothing) Then
Row(Column.Ordinal) = CStr(oRow(Column.Ordinal)).ToLower
End If
End Sub)
End Sub)
Console.WriteLine(oRow(1))
End Using
Console.ReadKey()
End Sub
End Module

VB.Net 的例子,但不是LAMBA:

Public Sub AssignDT(data_tables As Dictionary(Of String, DataTable))
Dim ApplicationDT = data_tables("Application")
For Each rw As DataRow In ApplicationDT.Rows
For i As Int16 = 0 To ApplicationDT.Columns.Count - 1
If ApplicationDT.Columns(i).DataType = GetType(String) Then
If rw(i) = "FALSE" Then
rw(i) = "false"
ElseIf rw(i) = "TRUE" Then
rw(i) = "true"
End If
End If
Next
Next
End Sub

或者

If rw(i) = "FALSE" OrElse rw(i) = "TRUE" Then rw(i) = rw(i).ToString.ToLower()

假设dataTable是一个System.Data.DataTable,这会将列columnname的所有值设置为小写。

dataTable.Select().ToList().ForEach(x => x["columnname"] = x["columnname"].ToString().ToLower());

最新更新