Могу ли я выбрать случайную строку с помощью ICriteria
API NHibernate?
Как выбрать случайную строку с помощью API ICriteria NHibernate?
Ответы (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
2.1.2 совместимость: общедоступное переопределение SqlString ToSqlString (критерии ICriteria, ICriteriaQuery conditionsQuery) {вернуть новый SqlString (newid ()); }
- person mxmissile; 18.09.2010
Однако такое использование Newid приводит к ужасной производительности на средних и больших таблицах.
- person UpTheCreek; 02.05.2011
Если вы не ограничены использованием ICriteria, я мог бы порекомендовать вместо этого использовать HQL для выбора случайной строки, поскольку это может обеспечить большую гибкость при использовании функции Random, предоставляемой вашим поставщиком базы данных.
IQuery q = NHibernateSession.CreateQuery("your hql statement here")
person
user52212
schedule
08.04.2009