Хорошо, поэтому у меня есть ListView с множеством доступных ему элементов в любое время (в виртуализированном режиме).Прямо над ListView находится текстовое поле, в котором пользователь может ввести любой критерий поиска, и ListView будет отфильтрован в реальном времени.ListView в настоящее время привязан к DataSet следующим образом:
SoundListView.DataContext = DS.Tables[0].DefaultView;
DataSet извлекается из внутренней базы данных SQLite.
А вот текущий код фильтра, который принимает текст поля поискачтобы отфильтровать ListView:
DS.Tables[0].DefaultView.RowFilter = String.Format("path LIKE '%{0}%'", EscapeLikeValue(SearchTextBox.Text));
Здесь вы можете видеть, что я использую дрянной модификатор LIKE SQL для фильтрации своих элементов на основе ключевого термина.Это плохо, потому что LIKE не является заменой полнотекстового поиска IMO.Чтобы решить эту проблему, я реализовал Lucence.NET.
Используя Lucene, я беру поисковый термин из текстового поля, и он выполняет поиск в Google-esque, где я могу использовать логические операторы и делать нечеткиесоответствующие и классные вещи, как это.Этот поиск в настоящее время работает!Поиск Lucene возвращает список идентификаторов, которые соответствуют идентификаторам в наборе данных, которые подают в ListView.
Итак, последняя часть моей головоломки состоит в том, чтобы заставить эти запросы поиска Lucene фильтровать ListView.Должен ли я использовать RowFilter и объединить все идентификаторы, которые совпадают в какой-то ужасной строке SQL, такой как:
... RowFilter = "id = 1 OR id = 3 OR id = 7"
Или есть лучший способ сделать это?