Как выбрать случайную строку с помощью API ICriteria NHibernate?

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


person Andrey Selitsky    schedule 08.04.2009    source источник


Ответы (2)


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

public class RandomOrder: Order {
    public RandomOrder() : base("", true) {}
    public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery) {
        return new SqlString("newid()");
    }
}
person Mauricio Scheffer    schedule 08.04.2009
comment
2.1.2 совместимость: общедоступное переопределение SqlString ToSqlString (критерии ICriteria, ICriteriaQuery conditionsQuery) {вернуть новый SqlString (newid ()); } - person mxmissile; 18.09.2010
comment
Однако такое использование Newid приводит к ужасной производительности на средних и больших таблицах. - person UpTheCreek; 02.05.2011

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


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

person user52212    schedule 08.04.2009