Domanda

Uso Castle ActiveRecord come livello di persistenza.

Ho ottenuto queste funzioni che devono restituire i primi 20 utenti dal database.

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

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

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

Nel mio database, al momento ho 100 utenti, voglio solo che la mia query restituisca 20 utenti e non 100.

Quando controllo cosa sta succedendo con log4net, vedo che la query ottiene prima 100 utenti e, successivamente, prende solo i 20 primi.

Vorrei sapere se esiste un modo migliore per farlo. Perché più utenti avrò, più la mia query sarà lenta e non ottimizzata ...

È stato utile?

Soluzione

Questo è ciò che accade ..

  1. Il metodo User.FindAll () restituisce un array di tutti gli utenti. (100 righe dal DB)
  2. Quindi ordini e filtra lo stesso array.

Con AR 2.0 puoi usare ActiveRecordLinqBase invece di ActiveRecordBase e utilizzare invece .Queryable se .FindAll ().

Questa query restituirà solo i 20 record dal database.

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

Altri suggerimenti

Crea una query HQL personalizzata con " SetMaxResults " metodo. Consulta la Guida per l'utente di ActiveRecord per un esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top