2009-04-23 4 views
2

J'essaie d'obtenir le top 10 des scores pour les utilisateurs de mon application. J'utilise habituellement quelque chose du genreTrouvez le top 10 des résultats d'une table en utilisant Castle ActiveRecord

User.SlicedFindAll(0, 10, 
NHibernate.Expression.Expression.Eq("IsActive", true), 
NHibernate.Expression.Order.Desc("Score") 

qui est habituellement utilisé à des fins de pagination. Cependant, je ne souhaite pas ajouter de contrainte (clause WHERE) à ma demande. Par conséquent, j'ai essayé quelque chose le long de

User.SlicedFindAll(0, 10, 
null, 
NHibernate.Expression.Order.Desc("Score") 

mais cela déclenche une exception NullReferenceException. Des pointeurs? (Je suppose que SlicedFindAll n'est pas un bon choix)

Google n'a pas aidé sur celui-là.

Répondre

3

Vous pouvez utiliser cette surcharge:

public static T[] SlicedFindAll(int firstResult, int maxResults, NHibernate.Expression.Order[] orders, params NHibernate.Expression.ICriterion[] criteria) 

dans votre cas, il serait:

User.SlicedFindAll(0, 10, new[] {Order.Desc("Score")}) 
+0

Merci, c'est ce que j'ai fini de faire même si je pense que ce n'est probablement pas optimal :) – Luk

+0

SlicedFind Tous les documents de référence: http://api.castleproject.org/html/Overload_Castle_ActiveRecord_ActiveRecordMediator_1_SlicedFindAll.htm –

0

Je préfère LINQ:

ActiveRecordLinq.AsQueryable<User>().Take(10) 

Il devrait parfaitement évaluer qc comme

select top 10 * from User 
Questions connexes