Фильтрация тегов Запрос с использованием T-SQL и Linq-to-SQL? - PullRequest
0 голосов
/ 02 мая 2010

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

Вот таблицы:


PACKETS
* PacketID
Имя


PACKETTAGS
* PacketTagID
PacketID
TagID


Метки
* TagID
Имя


Вот базовый запрос без параметров WHERE:

SELECT     
       Packets.Name, Tags.Name AS Tag, PacketTags.PacketTagID
FROM         
       Packets 
INNER JOIN
       PacketTags ON Packets.PacketID = PacketTags.PacketID 
INNER JOIN
       Tags ON PacketTags.TagID = Tags.TagID

Мне нужно отфильтровать все Пакеты, у которых нет тегов, соответствующих какому-либо из слов, но ТОЛЬКО включают Пакеты, теги которых введены в строку текста (пробелы разделяют теги при вводе в текстовое поле)

Я начинаю с основ, сначала разбираясь с этим в t-SQL, но в конечном итоге мне нужно сделать это в Linq-to-SQL

Ответы [ 2 ]

1 голос
/ 02 мая 2010

Если у вас есть список ваших тегов в памяти:

var query = from p in DataContext.Packets 
            where p.Tags.Intersect(listOfMustHaveTags).Count() == listOfMustHaveTags.Count()
            select p;

Я использую пересечение здесь, чтобы проверить, что набор обязательных тегов полностью содержится. Может быть, есть еще более простое решение.

0 голосов
/ 02 мая 2010

Создать функцию, которая берет список тегов с разделителями пробелами и возвращает таблицу. INNER Присоедините ваш запрос выше к результату этой функции.

Для этого написано несколько функций. Вот два:

http://tim.mackey.ie/SQLStringSplitFunction.aspx

http://www.codeproject.com/KB/database/SQL_UDF_to_Parse_a_String.aspx

Функция также вызывается через linq to sql.

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