Полное поисковое тестирование в LINQ (пользовательский фильтр запроса) - PullRequest
2 голосов
/ 07 января 2009

У меня есть таблица со списком названий ресторанов и ссылками на другую таблицу с типом кухни.

Я хочу предоставить окно поиска на своей веб-странице, чтобы при вводе каждого слова в базе данных производился поиск и возвращались результаты. Я искал решение, которое не включает настройку полнотекстового поиска sql, поскольку я хочу иметь возможность проверить это с помощью Linq to SQL.

Из моего старого кода у меня есть функция, которая создает фильтр запросов по заданному тексту и возвращает все результаты, основанные на этом.

Private Function SetupQuery(ByVal searchText As String) As String
    Dim searchFields As New List(Of String)

    searchFields.Add("Name")
    searchFields.Add("Postcode")
    searchFields.Add("Cuisine")

    Dim firstCol As Boolean = True

    Dim a() As String
    Dim j As Integer
    a = searchText.Trim.Split(" ")

    Dim filter As String = ""

    Dim compareString As String
    For Each col As String In searchFields
        For j = 0 To a.GetUpperBound(0)
            compareString = a(j).ToUpper()
            compareString = compareString.Trim()

            If firstCol Then
                filter = filter & col & " LIKE '" & compareString & "%' "
                firstCol = False
            Else
                filter = filter & " or " & col & " LIKE '" & compareString & "%' "
            End If
        Next
    Next

    Return filter
End Function

Это имеет жестко запрограммированные поля поиска, а затем циклически перебирает каждое и каждое слово в тексте поиска, чтобы создать фильтр OR LIKE.

Я уверен, что мог бы затем использовать это в своем коде LINQ, но это не кажется элегантным решением, особенно потому, что столбцы жестко запрограммированы и не используются так, как их использует LINQ.

Может ли кто-нибудь порекомендовать лучший способ сделать это или несколько советов в каком направлении идти с этим?

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 января 2009

Не знаю, как это повлияет на ваше тестирование, но LinqtoSQL можно настроить для работы с полнотекстовой индексацией с помощью нескольких покачиваний:

1 голос
/ 07 января 2009

Вы можете использовать полнотекстовый поиск и по-прежнему использовать LINQ to SQL. Вы можете создать хранимую процедуру и заставить ее вызывать LINQ. В дополнение к поиску точных совпадений вы можете вернуть:

  • Простой поиск определенных слов или фраз
  • Тезаурус ищет синонимичные формы слова - поиск в IE может возвращать попадания в Internet Explorer и IE (поиск расширения на основе тезауруса); поиск в Бомбее также может возвращать хиты в Мумбаи (поиск замен на основе тезауруса)
  • Поиски, которые будут возвращать все различные лингвистические формы слова (так называемые поколения), поиск по банку будет возвращать хиты по банковским, банковским, банкам, банкам и банкам и т. Д. (Все склонения и / или спряжения поискового термина банк )
  • Поиск без учета акцента - поиск в кафе вернул бы хиты в кафе и кафе

http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx

http://www.simple -talk.com / SQL / учиться-SQL-сервер / SQL-сервера полнотекстового поиска языка-функции /

0 голосов
/ 07 января 2009

Вероятно, это не лучший способ сделать это, но если вы всегда получаете искомый текст в виде строки, разбитой на массив из трех, вы можете попробовать использовать это:

from t in temp
where t.Name == a(0)
|| t.Postcode == a(1)
|| t.Cuisine == a(2)
select t

Обычно я делаю C #, поэтому все, что угодно в VB, пугает, но я думаю, что синтаксис LINQ должен быть похожим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...