Как выбрать случайную строку, используя ICriteria API от NHibernate? - PullRequest
6 голосов
/ 08 апреля 2009

Могу ли я выбрать случайную строку, используя ICriteria API NHibernate?

Ответы [ 2 ]

14 голосов
/ 09 апреля 2009

Как и сказал cundh2o, это зависит от СУБД. Но вы можете создать подкласс класса Order и определить свой собственный порядок. Например, для SQL Server:

public class RandomOrder: Order {
    public RandomOrder() : base("", true) {}
    public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery) {
        return new SqlString("newid()");
    }
}
1 голос
/ 08 апреля 2009

Если вы не ограничены использованием ICriteria, я мог бы порекомендовать использовать HQL вместо этого для выбора случайной строки, поскольку это может обеспечить большую гибкость при использовании функции Random, предоставляемой вашим поставщиком БД.


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

...