1

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

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

即居住在悉尼市的前 1000 人中的最低 ID。

有任何想法吗?干杯。

4

1 回答 1

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,但我认为它应该可以完成这项工作。

于 2012-11-19T17:23:39.953 回答