Я скоро начну простой проект поиска и поиска данных. По сути, одна из них «помещает мою огромную электронную таблицу Excel в базу данных, создает для нее веб-интерфейс пользователя и делает ее доступной для поиска».
Одна вещь, которая меня беспокоила, это фактическая логика поиска, которая будет использоваться, когда пользователь вводит некоторые критерии. Я представляю интерфейс поиска с текстовым полем и несколькими другими инструментами фильтрации - выпадающие списки и флажки и тому подобное.
Хотя это дает мне очень сильный, детальный контроль над фильтрацией, которую я могу выполнять, мне интересно, что думают SO о фактическом выполнении поиска. Здесь я буду использовать ASP.NET, MS SQL Server и Linq-To-SQL, так что помните об этих технологиях.
С макушки головы, думаю, я бы сделал что-то вроде:
var results = from s in db.Stuff
where (s.Prop1.Contains(textFilter) ||
s.Prop2.Contains(textFilter) ||
s.Prop3.Contains(textFilter)) &&
checkbox1.IsChecked ?
s.Prop4.ToLower().Equals(combobox1.Text) : true
select s;
Вот что я знаю:
- Как группировать и объединять при необходимости
- Я могу использовать метод Contains () для отдельных свойств для генерации SQL LIKE запросов
- Я могу фильтровать вещи по свойству, создавая логику поиска, как указано выше.
Вот что я спрашиваю:
- Есть ли способ поиска по всем свойствам (без вытягивания всех объектов в память - я предполагаю, что это означает создание списка свойств каждого объекта с отражением, их приведение в соответствие, а затем проверка завершена)? Если нет, то это кажется невероятно громоздким, так как мне пришлось бы создавать новую логику для каждого нового свойства, которое я мог бы добавить. Что-то вроде s.Contains (textFilter) в вышеприведенном будет идеальным.
- Как на самом деле работает запрос SQL LIKE ? Это то, что я хочу сделать?
- Существует ли стандартный способ реализации правил поиска, таких как строки в кавычках, для полных и логических операторов, таких как И и ИЛИ ? Я был бы удивлен, если бы каждое приложение, которое их реализовывало, делало это с пользовательской логикой синтаксического анализа.
- Я лаю не на том дереве? Я что-то пропустил?