NHibernate:聚合和rownum

时间:2012-11-19 10:13:42

标签: c# nhibernate linq-to-nhibernate criteria-api

我试图从NHibernate(通过NHibernate Criteria或LINQ)实现以下SQL。

SELECT MIN(ID)
FROM 
(SELECT * 
 FROM PERSON 
 WHERE CITY = 'SYDNEY' and ROWNUM < 1000)

即。居住在悉尼市的前1000人的最低身份证。

有什么想法吗?欢呼声。

1 个答案:

答案 0 :(得分:2)

这是使用Criteria API的类似查询:

session.CreateCriteria<Person>()
    .SetProjection(Projections.Min("ID"))
    .Add(Subqueries.PropertyIn("ID", 
             DetachedCriteria.For<Person>()
                  .Add(Restrictions.Eq("CITY", "SYDNEY")) 
                  .SetProjection(Projections.Property("Id"))
                  .SetMaxResults(1000)))
    .List();

生成的SQL查询使用TOP()而不是ROWNUM,但我认为它应该完成这项工作。