Question

J'utilise Castle ActiveRecord comme couche de persistance.

J'ai cette fonction qui doit renvoyer les 20 premiers utilisateurs de la base de données.

IList<User> users = new List<User>();

var userQuery = from u in User.FindAll()
                orderby u.CreationDate
                select u;

return userQuery.Take(20).ToList();

Dans ma base de données, j'ai actuellement 100 utilisateurs. Je souhaite seulement que ma requête renvoie 20 utilisateurs et non 100.

Lorsque je surveille ce qui se passe avec log4net, je vois que la requête reçoit d'abord 100 utilisateurs et ensuite, ne prend que les 20 premiers.

J'aimerais savoir s'il existe un meilleur moyen de le faire. Parce que plus j'aurai d'utilisateurs, plus ma requête sera lente et non optimisée ...

Était-ce utile?

La solution

C'est ce qui se passe ..

  1. La méthode User.FindAll () renvoie un tableau de tous les utilisateurs. (100 lignes de la base de données)
  2. Ensuite, vous commandez et filtrez le même tableau.

Avec AR 2.0 , vous pouvez utiliser ActiveRecordLinqBase au lieu de ActiveRecordBase et utiliser .Queryable à la place si .FindAll ().

Cette requête ne renvoie que les 20 enregistrements de la base de données.

var userQuery = (from u in User.Queryable
                orderby u.CreationDate
                select u).Take(20).ToList();

Autres conseils

Créez une requête HQL personnalisée comportant un " SetMaxResults " méthode. Voir le le guide de l'utilisateur ActiveRecord pour un exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top