How do I select a Random Row using NHibernate's ICriteria API?
Asked Answered
R

2

6

Can I select a random row using NHibernate's ICriteria API?

Regulus answered 8/4, 2009 at 12:15 Comment(0)
D
14

Just as cundh2o said, it's DBMS-specific. But you can subclass the Order class and define your own custom ordering. For example, for SQL Server:

public class RandomOrder: Order {
    public RandomOrder() : base("", true) {}
    public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery) {
        return new SqlString("newid()");
    }
}
Defect answered 8/4, 2009 at 23:16 Comment(2)
2.1.2 compatible: public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery) { return new SqlString("newid()"); }Tana
Use of Newid like this leads to terrible performance on medium-size to large tables though.Bernete
Q
1

If you are not limited to using ICriteria, I might recommend using HQL instead for selecting a random row, since it may provide more flexibility to use the Random function supplied by your db provider.


IQuery q = NHibernateSession.CreateQuery("your hql statement here")

Quench answered 8/4, 2009 at 12:28 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.