Posso selezionare una riga casuale utilizzando l'API ICriteria
di NHibernate?Come selezionare una riga casuale utilizzando l'API ICriteria di NHibernate?
6
A
risposta
13
Proprio come ha detto cundh2o, è specifico per DBMS. Ma puoi creare una sottoclasse della classe Order e definire il tuo ordine personalizzato. Ad esempio, per SQL Server:
public class RandomOrder: Order {
public RandomOrder() : base("", true) {}
public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery) {
return new SqlString("newid()");
}
}
1
Se non si è limitati a utilizzare ICriteria, si consiglia di utilizzare HQL invece di selezionare una riga casuale, poiché potrebbe fornire maggiore flessibilità per utilizzare la funzione Random fornita dal provider db.
IQuery q = NHibernateSession.CreateQuery("your hql statement here")
2.1.2 compatibile: public override SqlString ToSqlString (criteri ICriteria, ICriteriaQuery criteriaQuery) {return new SqlString ("newid()"); } – mxmissile
@mxmissile: saluti, ho aggiornato la mia risposta. –
L'uso di NewID come questo porta a prestazioni terribili su tavoli di dimensioni medio-grandi. – UpTheCreek