2010-10-04 40 views
1

我的對象模型如下:爲NHibernate的標準API許多一對多

項目有很多標籤,一個標籤可以同時屬於多個項目

我想使用標準的執行下面的查詢。

SELECT * FROM Item item 
WHERE item.Id in (Select it.ItemId from dbo.ItemToTags it where it.Tag_id = 'ONE') 
AND item.Id in (Select it.ItemId from dbo.ItemToTags it where it.Tag_id = 'TWO') 

含義我想給可能的標籤的集合,然後提供具有所有這些標籤的所有內容:

我嘗試以下,但我得到的不是結果:

CreateCriteria<Item>().CreateAlias("Tags", "Tags"); 
if (AndQuery) { 
    foreach(var tag in Tags) 
    { 
     criteria.Add(Subqueries.PropertyEq("Tags.Id", DetachedCriteria.For<Tag>().Add(Restrictions.Eq("Id", tag))             .SetProjection(Projections.Property("Id")))); 
    } 
} 

回答

0

我不知道,如果你的查詢可以翻譯爲:

SELECT * FROM Item item 
join ItemToTags itt on itt.ItemId = item.Id 
join Tags t on itt.TagId = t.Id 
where t.Id in ('ONE','TWO') 

如果是這樣,你應該能夠做T他的:

CreateCriteria<Item>().CreateAlias('Tags','t') 
    .Add(Restrictions.In('t.Id',new List<string>{'TWO','ONE'}).List<Item>(); 

這是假設您已將標記集合映射到Item上。

hth

+0

感謝您的回答,但那會給我OR關係。我正在尋找一個安慰!這就是爲什麼我的查詢包含兩個子查詢,而不是! – Patrick 2010-10-05 13:02:13