2009-12-02 76 views
1

計數對不起,神祕的標題選擇..NHibernate的標準,由物業

你能幫助我,就如何做一個選擇,基於屬性的數量,採用的標準? 我有一個對象(Pool)與一個屬性(PoolItems),我想選擇所有池w。超過5個PoolItems。

回答

5

試試這個:

DetachedCriteria dCriteria = DetachedCriteria.For<PoolItem>("pItem") 
      .SetProjection(Projections.Count("Id")) 
      .Add(Restrictions.EqProperty("pItem.PoolID", "pool.Id")); 

IList<Post> posts = Session.CreateCriteria<Pool>("pool") 
       .Add(Subqueries.Gt(5, dCriteria)).List<Pool>(); 

假設PoolItem表有一個PoolID列池表的外鍵。 這種關係是一對多的關係。如果您沒有將PoolID屬性映射到PoolItem類中,並且您只有名爲「Pool」的多對一對象映射,請在分離條件中將「pItem.PoolID」替換爲「pItem.Pool.Id」。

+0

好吧,這有很大的幫助,但我還沒有完成。這個映射在PoolItem類中並不真正表示,只能通過數據庫中的外鍵和Pool類的映射來表示。 我應該通過Pool屬性公開關係,還是有另一種/更好的方式來實現這一目標?我知道我可以通過SQL來實現,但我寧願學習Criteria方法:o) – hhravn 2009-12-03 08:02:03

+0

在PoolItem類中映射Pool屬性不僅是關於實體的模式表示的好主意,它也是一個好主意,因爲它允許您使用關係來完成上述解決方案。如果您希望在您的課堂中沒有這樣的屬性,因爲您希望使用的代碼無法訪問Pool或PoolID屬性(如果您希望只有一個爲只讀 - insert =「false」更新,您可以將它們公開=「false」),您可以將它映射到專用字段(access =「field」)。 – tolism7 2009-12-03 09:38:51