Pergunta

Eu uso Castle ActiveRecord como minha camada de persistência.

Eu tenho esse funções que devem retornar a primeira usuários 20 a partir do banco de dados.

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

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

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

No meu banco de dados, eu tenho atualmente 100 usuários, eu só quero que meu retorno consulta 20 usuários e não 100.

Quando eu monitorar o que está acontecendo com log4net, eu vejo que a consulta primeiro obter 100 usuários e, depois, ter apenas os 20 primeiros.

Eu gostaria de saber se ele está lá uma maneira melhor de fazer isso. Porque os usuários mais eu vou ter, mais minha consulta será lenta e não otimizado ...

Foi útil?

Solução

Este é o que acontece ..

  1. O User.FindAll método () retorna uma matriz de todos os usuários. (100 linhas da DB)
  2. Em seguida, você hora e filtro que mesmo array.

Com AR 2.0 você pode usar ActiveRecordLinqBase vez de ActiveRecordBase e usar .Queryable em vez se .FindAll ().

Esta consulta retornará apenas os 20 registros da base de dados ..

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

Outras dicas

Crie uma consulta HQL costume que tem um método "setMaxResults". Veja as ActiveRecord Usuários guiar para um exemplo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top