You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VB.NET中从第二个DataTable向第一个执行查找匹配

在VB.NET中通过匹配Size字段为table1添加SizePriority列

完全可以通过Lookup相关逻辑实现需求,下面提供两种实用的实现方案,基于你给出的代码进行补充:

方案一:使用DataTable.Lookup方法(直接匹配)

DataTable.Lookup方法可直接按指定键值查找目标表的对应字段值,非常适配你的场景,步骤如下:

  1. 给table1添加SizePriority列
  2. 遍历table1的每一行,通过Size字段匹配table2中的对应记录,获取SizePriority值并赋值

补充后的完整代码:

Private table1 As New DataTable
Private table2 As New DataTable

Protected Overrides Sub OnLoad(e As EventArgs)
    MyBase.OnLoad(e)
    ' 初始化table1
    table1.Columns.AddRange({
        New DataColumn("Column1", GetType(String)),
        New DataColumn("Column2", GetType(String)),
        New DataColumn("Column3", GetType(String)),
        New DataColumn("Size", GetType(String)),
        New DataColumn("Qty", GetType(Integer))
    })
    table1.Rows.Add("TEST 3000", "TEST", "BHTF10", "5L", 25)
    table1.Rows.Add("TEST 2000", "TEST", "BHTF15", "S", 55)
    table1.Rows.Add("TEST 3000", "TEST", "BHTF10", "M", 65)
    table1.Rows.Add("TEST 1000", "TEST", "BHTF25", "6L", 10)
    table1.Rows.Add("TEST 3000", "TEST", "BHTF10", "S", 12)

    ' 初始化table2
    createtabletwo()

    ' 添加SizePriority列到table1
    table1.Columns.Add("SizePriority", GetType(Integer))

    ' 遍历table1,匹配并赋值SizePriority
    For Each row As DataRow In table1.Rows
        Dim sizeValue As String = row("Size").ToString()
        ' 从table2中查找对应Size的SizePriority
        Dim priorityValues() As Object = table2.Lookup("Size", sizeValue, "SizePriority")
        If priorityValues.Length > 0 Then
            row("SizePriority") = priorityValues(0)
        Else
            ' 处理无匹配的情况(可选,比如赋值DBNull或默认值)
            row("SizePriority") = DBNull.Value
        End If
    Next

    DataGridView1.DataSource = table1
End Sub

Private Sub createtabletwo()
    table2.Columns.AddRange({
        New DataColumn("Size", GetType(String)),
        New DataColumn("SizePriority", GetType(Integer))
    })
    table2.Rows.Add("5L", 13)
    table2.Rows.Add("S", 2)
    table2.Rows.Add("M", 3)
    table2.Rows.Add("6L", 15)
    table2.Rows.Add("3L", 9)
End Sub

方案二:使用LINQ查询(简洁高效)

通过LINQ将两个表按Size字段关联,直接生成包含SizePriority的结果集,代码风格更简洁:

' 在OnLoad方法中初始化两个表后,添加以下代码
Dim result = From t1 In table1.AsEnumerable()
             Join t2 In table2.AsEnumerable()
             On t1.Field(Of String)("Size") Equals t2.Field(Of String)("Size")
             Select New With {
                 .Column1 = t1.Field(Of String)("Column1"),
                 .Column2 = t1.Field(Of String)("Column2"),
                 .Column3 = t1.Field(Of String)("Column3"),
                 .Size = t1.Field(Of String)("Size"),
                 .Qty = t1.Field(Of Integer)("Qty"),
                 .SizePriority = t2.Field(Of Integer)("SizePriority")
             }

' 将LINQ结果转换为DataTable(如需绑定到DataGridView)
Dim resultTable As DataTable = New DataTable()
resultTable.Columns.Add("Column1", GetType(String))
resultTable.Columns.Add("Column2", GetType(String))
resultTable.Columns.Add("Column3", GetType(String))
resultTable.Columns.Add("Size", GetType(String))
resultTable.Columns.Add("Qty", GetType(Integer))
resultTable.Columns.Add("SizePriority", GetType(Integer))

For Each item In result
    resultTable.Rows.Add(item.Column1, item.Column2, item.Column3, item.Size, item.Qty, item.SizePriority)
Next

DataGridView1.DataSource = resultTable

最终期望结果

Column1Column2Column3SizeQtySizePriority
TEST 3000TESTBHTF105L2513
TEST 2000TESTBHTF15S552
TEST 3000TESTBHTF10M653
TEST 1000TESTBHTF256L1015
TEST 3000TESTBHTF10S122

内容的提问来源于stack exchange,提问作者roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:37:32