2008-09-24 35 views
3

假設我在帖子和標籤(爲了保護無辜者而更改了域對象名稱)之間有多對多關係(使用ActiveRecord屬性HasAndBelongsToMany),並且我想要一個方法,如C#+ Castle ActiveRecord:HasAndBelongsToMany和集合

FindAllPostByTags(IList<Tag> tags)
它會返回所有包含參數中所有(不僅僅是一些)標籤的帖子。任何我可以用NHibernate Expressions或HQL完成這個任務的方法?我搜索了HQL文檔,找不到符合我需求的任何內容。我希望我只是錯過了一些明顯的東西!

+0

下面是否有任何答案適合您?如果是這樣,那麼回答一個忙,並接受它。 – 2009-12-17 14:45:11

回答

2

你也可以只使用一個IN聲明

DetachedCriteria query = DetachedCriteria.For<Post>(); 
query.CreateCriteria("Post").Add(Expression.In("TagName", string.Join(",",tags.ToArray())); 

我還沒有編譯的,因此可能有錯誤

0

我現在沒有一個系統與手中的Castle安裝,所以我沒有測試或編譯這個,但下面的代碼應該做你想做的。

Junction c = Expression.Conjunction(); 
foreach(Tag t in tags) 
    c = c.Add(Expression.Eq("Tag", t); 

return sess.CreateCriteria(typeof(Post)).Add(c).List(); 
0

我有同樣的問題,並試圖讀取HQL-文檔,但是一些功能似乎並沒有在NHibernate中實現(例如使用關鍵字)

我結束了這種解決方案:

 
select p 
FROM Post p 
JOIN p.Tags tag1 
JOIN p.Tags tag2 
WHERE 
    tag1.Id = 1 
    tag2.Id = 2 

含義,使用每個標記的連接動態構建HQL,然後在WHERE子句中進行選擇。這對我有效。我試圖用DetachedCriteria做同樣的事情,但試圖多次加入表時遇到了麻煩。