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

VB.NET中如何结合FirstOrDefault实现DataTable多条件查询

DataTable多条件查询问题修复方案

问题排查

  1. 你当前的dt.Select写法错误:用了VB的And运算符连接两个字符串,但DataTable的过滤条件需要是单个完整的SQL风格字符串,正确做法是把条件用AND拼接成一个字符串。
  2. 新增的ColorCode和Size变量没有加入查询条件,这是你要实现的功能但没落实。
  3. 直接拼接字符串存在风险:如果输入内容包含单引号(比如O'Neil),会导致过滤语句报错。

修复后的完整代码

Private Sub process()
    Dim Barcode = TextBox1.Text.Trim()
    Dim CodeProduct = TextBox2.Text.Trim()
    Dim ColorCode = "test" ' 替换成你的实际输入控件值,比如TextBox3.Text.Trim()
    Dim Size = "test" ' 替换成你的实际输入控件值,比如TextBox4.Text.Trim()
    Dim row As DataRow = Nothing

    ' 用来存储有效查询条件
    Dim conditions As New List(Of String)()

    ' 非空条件才加入,避免空文本干扰查询
    If Not String.IsNullOrEmpty(Barcode) Then
        ' 转义单引号,防止语法错误
        conditions.Add($"Barcode = '{Barcode.Replace("'", "''")}'")
    End If
    If Not String.IsNullOrEmpty(CodeProduct) Then
        conditions.Add($"CodeProduct = '{CodeProduct.Replace("'", "''")}'")
    End If
    If Not String.IsNullOrEmpty(ColorCode) Then
        conditions.Add($"ColorCode = '{ColorCode.Replace("'", "''")}'")
    End If
    If Not String.IsNullOrEmpty(Size) Then
        conditions.Add($"Size = '{Size.Replace("'", "''")}'")
    End If

    ' 有数据且有条件时执行查询
    If dt.Rows.Count > 0 AndAlso conditions.Count > 0 Then
        Dim filterString = String.Join(" AND ", conditions)
        row = dt.Select(filterString).FirstOrDefault()
    ElseIf conditions.Count = 0 Then
        ' 无查询条件时的处理,比如返回第一条数据,可按需调整
        row = dt.Rows.Cast(Of DataRow).FirstOrDefault()
    End If

    ' 这里添加找到row后的业务逻辑,比如更新Qty、绑定到网格等
End Sub

核心说明

  • 条件按需添加:只有当输入框有内容时,才把对应字段加入查询条件,避免用户未输入时过滤掉所有数据。
  • 单引号转义:用Replace("'", "''")处理输入中的单引号,避免破坏过滤语句的字符串结构。
  • 正确拼接过滤语句:用String.Join把所有条件用AND连接成符合DataTable要求的过滤字符串。
  • 空条件处理:当所有查询条件都为空时,可根据业务需求返回第一条数据或空值,代码中给出的是返回第一条的示例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:16:38