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

如何用.NET Linq在驱动Inf字符串列表中匹配PNP硬件ID

问题:匹配硬件PNP ID与驱动Inf文件中的条目

我有一个存储硬件PNP ID的List(Of String),示例如下:

Dim ListOfPNPIds As New List(Of String) From {
    "PCI\VEN_8086&DEV_3E9B&SUBSYS_22A817AA&REV_00",
    "PCI\VEN_8086&DEV_3E9B&SUBSYS_22A817AA",
    "PCI\VEN_8086&DEV_3E9B&CC_030000",
    "PCI\VEN_8086&DEV_3E9B&CC_0300",
    "PCI\VEN_8086&DEV_3E9B"
}

同时我把驱动Inf文件内容读取到另一个List(Of String)中,包含硬件ID的行带有其他文本,示例如下:

Dim ListOfDriverInf As New List(Of String) From {
    "%iCFLDTGT1%           = iCFL_w10_DS, PCI\VEN_8086&DEV_3E90",
    "%iCFLDTGT2%           = iCFL_w10_DS, PCI\VEN_8086&DEV_3E92",
    "%iCFLDTWSGT2%         = iCFL_w10_DS, PCI\VEN_8086&DEV_3E96",
    "%iCFLHALOGT2%         = iCFL_w10_DS, PCI\VEN_8086&DEV_3E9B"
}

我需要用Linq查询判断ListOfDriverInf中是否有项包含ListOfPNPIds中的任意一个ID。硬编码指定ID的方式能得到预期结果,但无法遍历所有PNP ID:

' 硬编码可行,但无法遍历ListOfPNPIds
Dim result = ListOfDriverInf.Any(Function(x) x.Contains("PCI\VEN_8086&DEV_3E9B"))

我尝试过下面的写法,但无法正常工作:

' 此写法错误,因为Find返回的是匹配的元素而非布尔值
ListOfPNPIds.Any(Function(p) ListOfDriverInf.Find(Function(s) s.Contains(p)))

需要一个能正确匹配的Linq查询,比如当ListOfPNPIds中的PCI\VEN_8086&DEV_3E9B与ListOfDriverInf中的%iCFLHALOGT2% = iCFL_w10_DS, PCI\VEN_8086&DEV_3E9B匹配时返回结果。


解决方案

问题出在你用了List.Find,它返回的是第一个匹配的元素,而Any需要的是布尔值。把Find换成Any就能正确判断是否存在匹配项。

基础判断:是否存在匹配条目

有两种等价的写法,任选其一即可:

' 写法1:从驱动Inf列表出发,检查是否有行包含任意PNP ID
Dim hasMatch = ListOfDriverInf.Any(Function(infLine) 
                                      ListOfPNPIds.Any(Function(pnpId) infLine.Contains(pnpId)) 
                                  )
' 写法2:从PNP ID列表出发,检查是否有ID被任意Inf行包含
Dim hasMatch = ListOfPNPIds.Any(Function(pnpId) 
                                   ListOfDriverInf.Any(Function(infLine) infLine.Contains(pnpId)) 
                               )

两种写法都会返回True(存在匹配)或False(无匹配)。

进阶:获取所有匹配的Inf行

如果需要拿到所有符合条件的Inf行,而不只是判断是否存在,可以用Where:

Dim matchingInfLines = ListOfDriverInf.Where(Function(infLine) 
                                                ListOfPNPIds.Any(Function(pnpId) infLine.Contains(pnpId)) 
                                            ).ToList()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:35:15