Domanda

I am trying to achieve the following SQL from NHibernate (via NHibernate Criteria or LINQ).

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

I.e. The lowest ID from a first 1000 people that lives in the city of Sydney.

Any ideas? Cheers.

È stato utile?

Soluzione

This is a similar query using the 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();

The resulting SQL query uses TOP() instead of ROWNUM, but I think it should do the job.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top