У меня есть специализированный строковый словарь (строка, строка) (_RulesAndTheirDescription), который содержит имя (ключ) и описание (значение) методов в данном классе. В настоящее время я делаю следующий запрос, чтобы найти совпадение по ключу или значению, а затем связать его с сеткой. Работает отлично!
Dim Results = From v In _RulesAndTheirDescriptions _
Where v.Value.ToString().ToUpper().Contains(Me.txtSearchFor.Text.ToUpper()) _
Or v.Key.ToString().ToUpper().Contains(Me.txtSearchFor.Text.ToUpper()) _
Order By v.Key _
Select New With {.Rule = v.Key, .Description = v.Value.ToString()}
Это прекрасно работает при сопоставлении слов "word" или, возможно, даже "my word", но я бы хотел найти слова "my" и "word", а также "this". Значение слова и фразы разделены пробелами. Очень похоже на Google и Bing. Когда пользователь вводит значение, я только потребую, чтобы фразы были заключены в кавычки. Следующий RegEx позаботится о том, чтобы получить мне список слов / фраз, которые ищет пользователь. Теперь мне трудно совместить вышеуказанный запрос, который работает с новым расширенным списком.
Пожалуйста, извините код ниже. Я просто пытаюсь что-то проверить и заставить его работать.
Dim b As Match
b = Regex.Match(Me.txtSearchFor.Text, "(?<=(?:^|\s|,)"")[^""]*?(?="")|(?<=\s|^)(?!"")[\w\W]+?(?=\s|$)")
Dim sl As List(Of String) = New List(Of String)
If b.Success Then
sl.Add(b.Value.ToUpper())
Dim sMatch = b.NextMatch()
While sMatch IsNot Nothing AndAlso sMatch.Success
sl.Add(sMatch.Value.ToUpper())
sMatch = sMatch.NextMatch()
End While
End If
В другом сообщении на этом сайте я пытался сделать следующее, но это не дает никаких результатов. Я подозреваю, потому что sl.ToString () возвращает тип, а не значение?
Dim Results = From v In _RulesAndTheirDescriptions _
Where v.Value.ToString().ToUpper().Contains(sl.ToString()) _
Order By v.Key _
Select New With {.Rule = v.Key, .Description = v.Value.ToString()}
Если я все делаю неправильно, пожалуйста, просветите меня. Похоже, это должно быть легко.
Спасибо заранее,
Kevin