Kann ich mit der ICriteria
API von NHibernate eine zufällige Zeile auswählen?Wie wähle ich eine zufällige Zeile mit NHibernate ICriteria API?
6
A
Antwort
13
Genau wie cundh2o sagte, es ist DBMS-spezifisch. Sie können jedoch die Order-Klasse ableiten und Ihre eigene benutzerdefinierte Reihenfolge definieren. Zum Beispiel für SQL Server:
public class RandomOrder: Order {
public RandomOrder() : base("", true) {}
public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery) {
return new SqlString("newid()");
}
}
1
Wenn Sie nicht auf ICriteria beschränkt sind, empfehle ich Ihnen, stattdessen HQL zu verwenden, um eine zufällige Zeile auszuwählen, da es möglicherweise mehr Flexibilität bietet, die von Ihrem Datenbankanbieter bereitgestellte Random-Funktion zu verwenden.
IQuery q = NHibernateSession.CreateQuery("your hql statement here")
2.1.2 kompatibel: public override SqlString ToSqlString (ICriteria Kriterien, ICriteriaQuery criteriaQuery) { neuen SqlString zurückzukehren ("newid()"); } – mxmissile
@mxmissile: Prost, ich aktualisierte meine Antwort. –
Die Verwendung von Newid führt jedoch zu einer schrecklichen Leistung auf mittelgroßen bis großen Tabellen. – UpTheCreek