2010-03-14 5 views
1

나는이에 페이징을 추가하는 방법을 잘 모르겠어요 필요합니다.NHibernate.Linq 기준에 API 번역 도움이

var rowCount = Session.CreateCriteria(typeof(Article)) 
    .SetProjection(Projections.RowCount()).FutureValue<Int32>(); 

var res = Session.CreateCriteria(typeof(Article)) 
    .Add(/* any help with this? :) */) 
    .SetFirstResult(page * pageSize) 
    .SetMaxResults(pageSize)  
    .AddOrder(new Order("DatePublish", true)) 
    .Future<Article>(); 

totalCount = rowCount.Value; 

도움을 주시면 감사하겠습니다.

답변

2

페이징을 수행하는 링크에서 SkipTake 명령을 사용하십시오.

시나리오 :

Session.Linq<Article>() 
    .Where(art => art.Tags.Any(t => t.Name == tag)) 
    .Skip(2*20).Take(20) 
    .ToList(); 

int totalCount = Session.Linq<Article>() 
        .Where(art => art.Tags.Any(t => t.Name == tag)) 
        .Count(); 
+0

그래,하지만 어떻게 총 수를 검색 할? 어떻게 동일한 데이터베이스 요청에서 그렇게합니까? 나는 수천 건의 기사를 검색하고 싶지 않다. –

+0

나는이 일을하지 않았지만, 대부분의 경우 카운트 방법을 호출하는 것이 확실합니다. 사용중인 LINQ 공급자에 따라 쿼리가 실행 된 후에 더 많은 방법으로 카운트를 가져올 수 있습니다. Hibernate LINQ Provider는 이것을하기위한 더 좋은 방법을 가지고있을 것입니다. 나는 단지 최소한의 LINQ를 제공 할 것이라고 생각했습니다. – smaclell

+0

2 데이터베이스 히트가 발생할 것이라고 확신합니다. 그렇지 않으면 놀랄 것입니다. 프로파일 러 로그를 게시하고 게시합니다. :) –