1
我有一個問題列表,每個問題鏈接到一個標籤列表。NHibernate的多對多標準
,後面的數據:
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>();
回報(我明白爲什麼,在 「中」 像一個或行爲)
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
)
謝謝你,但是這是行不通的,因爲它會產生下面的SQL:選擇[剪斷] FROM 「問題」 this_ inner join QuestionsToTags tags3_ on this_.Id = tags3_.Question_id內連接「標籤」tag1_在tags3_.Tag_id = tag1_.Id WHERE(tag1_.Id = 1和tag1_.Id = 2)。所以沒有返回,因爲ID不能是1和2 – mathieu 2010-12-11 19:05:21