У меня есть список вопросов, каждый из которых связан со списком тегов.
И следующие данные:
Question1 : Tag1
Question2 : Tag1, Tag2
Question3 : Tag1, Tag2, Tag3
Question4 : Tag1, Tag3
Следующие критерии:
var tagsIds = new int[] { tag1, tag2 };
var res = session.CreateCriteria<Question>()
.CreateCriteria( "Tags" )
.Add( Restrictions.In( "id", tagsIds ) )
.List<Question>();
возвращает (я понимаю, почему, "in" действует как ИЛИ)
Question1, Question2, Question3, Question4
Или я хотел бы получить только
Question2, Question3
, так как они оба имеют tag1 И tag2.Есть ли способ сделать это?
В SQL я бы сделал что-то вроде:
SELECT *
FROM Question q
WHERE EXISTS (
SELECT *
FROM QuestionsToTags qtt
WHERE qtt.Question_id = q.Id
AND qtt.Tag_id IN ( 1, 2 )
GROUP BY qtt.Question_id
HAVING COUNT( qtt.Question_id ) >= 2
)