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

如何用LINQ查询包含数组任一值的项并绑定DataGridView

多关键词查询解决方案

问题根源

原代码报错是因为String.Contains()仅支持单个字符串参数,无法直接传入字符串数组,必须换用数组的Any()方法实现“任一关键词匹配”的逻辑。

修正后的完整代码

Private Sub filldgvData()
    Dim strSearch() As String = {"one", "two", "three"}
    Dim query = From item In rawdata
                Let itemText = item.Text
                Where strSearch.Any(Function(keyword) itemText.Contains(keyword))
                Select item.index, item.LineNumber, item.StartTime, item.EndTime, item.Text
                Distinct
                Order By LineNumber Ascending
    dgvdata.DataSource = query.ToList()
    
    dgvdata.Columns(0).HeaderText = "Index"
    dgvdata.Columns(1).HeaderText = "Line"
    dgvdata.Columns(2).HeaderText = "Start Time"
    dgvdata.Columns(3).HeaderText = "End Time"
    dgvdata.Columns(4).HeaderText = "Text"
End Sub

关键修改说明

  • 匹配逻辑调整:用strSearch.Any(Function(keyword) itemText.Contains(keyword))替代原错误写法,Any()会遍历关键词数组,只要当前项的Text包含数组中任意一个关键词,就会被筛选出来。
  • 去重处理:添加Distinct关键字,确保每个匹配项在结果中仅显示一次,避免同一项因匹配多个关键词重复出现。
  • 笔误修正:原代码最后一列表头设置错误引用了dgvSRT,已统一改为目标控件dgvdata。

可选:整词匹配优化

如果需要避免部分匹配(比如不想让"someone"被判定为包含"one"),可以使用正则表达式实现整词匹配,需先导入Imports System.Text.RegularExpressions,修改Where条件为:

Where strSearch.Any(Function(keyword) Regex.IsMatch(itemText, $"\b{Regex.Escape(keyword)}\b"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:45:14