У меня есть список (строка), содержащий аппаратные идентификаторы PNP, например.
ListOfPNPIds = List(Of String)
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-файлы драйвера во второй список (из строки), но строки, содержащие идентификатор оборудования, содержат другой текст, не позволяющий мне выполнить простое сопоставление, например.
ListOfDriverInf = List(Of String)
%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
Как я могу выполнить поиск в ListOfDriverInf, чтобы найти, содержит ли какой-либо элемент один (или несколько) элементов в ListOfPNPIds
Я попытался выполнить несколько разных запросов Linq, но не могу заставить Linq искать элементы подстроки ListOfDriverInf для элементов, содержащихся в ListOfPNPIds.
Это вернет результат, который мне нужен, но не ищет в списке ListOfPNPIds.
Dim result = ListOfDriverInf.Any(Function(x) x.Contains("PCI\VEN_8086&DEV_3E9B"))
Например, я пробовал:
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
Я бы использовал EndsWith
для сравнения.
Dim listOfPNPIds = 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"
}
Dim listOfDriverInf = 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"
}
Dim result = listOfDriverInf.Where(
Function(x) listOfPNPIds.Any(
Function(y) x.EndsWith(y)))
Когда я запускаю ваш код, я получаю результат = ничего.
@Ben Если вы запустите точный код, вы должны получить одно совпадение (последнее DriverInf).
Если по какой-то причине это не работает, возможно, есть пробел или что-то еще, вы можете изменить x.endsWith(y)
на x.contains(y)
Я нашел причину, по которой я ничего не получаю! Информация о драйвере, которую я пытаюсь установить, содержит эту строку: «%TEE_DeviceDesc%=TEE_DDI_W8, PCI\VEN_8086&DEV_5A9A ;BXT-P», что означает, что x не заканчивается на y
Пожалуйста, пометьте свой вопрос соответствующим языком .net.