2009-12-02 53 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