2009-04-08 12 views

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()"); 
    } 
} 
+0

2.1.2 kompatibel: public override SqlString ToSqlString (ICriteria Kriterien, ICriteriaQuery criteriaQuery) { neuen SqlString zurückzukehren ("newid()"); } – mxmissile

+0

@mxmissile: Prost, ich aktualisierte meine Antwort. –

+1

Die Verwendung von Newid führt jedoch zu einer schrecklichen Leistung auf mittelgroßen bis großen Tabellen. – UpTheCreek

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") 
 
Verwandte Themen