Хорошо,
Сегодня я пытаюсь выучить Subsonic. Довольно классные вещи.
Я пытаюсь встроить некоторые функции поиска в свой веб-сайт, но изо всех сил пытаюсь добиться этого в Subsonic.
У меня есть одно поле поиска, которое может содержать несколько ключевых слов. Я хочу вернуть результаты, которые соответствуют всем ключевым словам. Цель поиска - один текстовый столбец.
Пока у меня есть это (оно работает, но никогда не возвращает результаты):
return new SubSonic.Select().From(Visit.Schema)
.InnerJoin(InfopathArchive.VisitIdColumn, Visit.VisitIdColumn)
.Where(InfopathArchive.XmlDocColumn).Like(keywords)
.ExecuteTypedList<Visit>();
Между таблицей посещений и таблицей InfoPathArchive существует однозначное соответствие. Я просто хочу вернуть коллекцию посещений с ключевыми словами в связанном XMLDocColumn.
Если бы я мог заставить это работать, было бы здорово. Теперь вторая проблема заключается в том, что если кто-то ищет «australia processmodel», то, очевидно, приведенный выше код должен возвращать только эту точную фразу. Как создать запрос, который разделяет мой поисковый запрос, чтобы он возвращал документы, содержащие ВСЕ отдельные поисковые термины?
Любая помощь приветствуется.
Редактировать: Хорошо, так что основной поиск работает, но поиск по нескольким ключевым словам - нет. Я сделал то, что предложил Адам, но кажется, что Subsonic использует только один параметр для запроса.
Вот код:
List<string> wordsInQueryList = keywords.Split(' ').ToList();
SqlQuery q = Select.AllColumnsFrom<Visit>()
.InnerJoin(InfopathArchive.VisitIdColumn, Visit.VisitIdColumn)
.Where(Visit.IsDeletedColumn).IsEqualTo(false);
foreach(string wordInQuery in wordsInQueryList)
{
q = q.And(InfopathArchive.XmlDocColumn).Like("%" + wordInQuery + "%");
}
return q.ExecuteTypedList ();
Тогда, если я посмотрю на запрос, который генерирует Subsonic:
SELECT (bunch of columns)
FROM [dbo].[Visit]
INNER JOIN [dbo].[InfopathArchive] ON [dbo].[Visit].[VisitId] = [dbo].[InfopathArchive].[VisitId]
WHERE [dbo].[Visit].[IsDeleted] = @IsDeleted
AND [dbo].[InfopathArchive].[XmlDoc] LIKE @XmlDoc
AND [dbo].[InfopathArchive].[XmlDoc] LIKE @XmlDoc
В итоге получается, что ищется только последнее ключевое слово.
Есть идеи?