문제

나는 사용한다 캐슬 activerecord 내 영구 층으로.

데이터베이스에서 처음 20 명의 사용자를 반환 해야하는이 기능을 얻었습니다.

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

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

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

내 데이터베이스에는 현재 100 명의 사용자가 있으며 쿼리가 100 명이 아닌 20 명의 사용자를 반환하기를 원합니다.

log4net에서 무슨 일이 일어나고 있는지 모니터링 할 때 쿼리는 먼저 100 명의 사용자를 얻고 후에 20을 먼저 가져갑니다.

더 좋은 방법이 있는지 알고 싶습니다. 사용자가 많을수록 더 많은 쿼리가 느리고 최적화되지 않을 것입니다 ...

도움이 되었습니까?

해결책

이것이 일어나는 일입니다 ..

  1. method user.findall ()은 모든 사용자의 배열을 반환합니다. (DB에서 100 줄)
  2. 그런 다음 같은 배열을 주문하고 필터링합니다.

와 함께 AR 2.0 activeRecordbase 대신 activereCordlinQBase를 사용하고 .findall ()을 대신 .queryable을 사용할 수 있습니다.

이 쿼리는 데이터베이스에서 20 개의 레코드 만 반환합니다.

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

다른 팁

"setMaxResults"메소드가있는 사용자 정의 HQL 쿼리를 만듭니다. 참조 ActiveRecord 사용자 안내서 예를 들어.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top