2009-04-08 7 views

Respuesta

13

Como dijo cundh2o, es específico de DBMS. Pero puede subclasificar la clase Order y definir su propio pedido personalizado. Por ejemplo, para 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 compatibles: public override SqlString ToSqlString (criterios ICriteria, ICriteriaQuery criteriaQuery) {return new SqlString ("newid()"); } – mxmissile

+0

@mxmissile: aplausos, actualicé mi respuesta. –

+1

El uso de Newid como este conduce a un rendimiento terrible en tablas medianas a grandes. – UpTheCreek

1

Si no está limitado a usar ICriteria, podría recomendar el uso de HQL en su lugar para seleccionar una fila aleatoria, ya que puede proporcionar más flexibilidad para usar la función Aleatoria suministrada por su proveedor de db.

 

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