Я вырываю свои волосы на этом ...
Предположим, у нас есть список блогов, которым назначены теги. Пользователь ищет любой термин, и результат должен включать:
- Все блоги, чье имя содержит термин ИЛИ
- Все блоги, в которых любое имя тега содержит term
- Только теги, чье имя соответствует термину
Запрос SQL, который достигает этого:
declare @query varchar(20) = '%name%';
SELECT *
FROM Blogs blog
INNER join BlogTags bt on blog.ID = bt.BlogId --join table
INNER join Tags tag on tag.Id = bt.TagId
and tag.name like @query -- condition 3
WHERE blog.name like @query -- condition 1
OR tag.name like @query -- condition 2
Я пытался весь день чтобы заставить это работать в запросе NHibernate, но я всегда застреваю в условии OR, поскольку они не ссылаются на один и тот же объект. Использование Restrictions.Like
, кажется, не понимает, что я хочу вложенное свойство, и фильтрация вложенного объекта обычно выполняется с использованием CreateCriteria
, который недоступен внутри Restrictions.Or
. Я также не нашел способа включить условие 3.
Мне все равно, выполнено ли это с помощью Query
, QueryOver
или CreateCriteria
. В настоящее время я просто хочу, чтобы это работало:)
Возможно, уместны другие вопросы SO: