2010-01-28 4 views
2

LINQ를 사용하여 Nhibernate를 사용하여 데이터베이스의 테이블에 대한 개수를 얻으려고합니다. 그러나, 내가 실행중인 코드는 테이블에서 select count()를 실행하는 것보다 테이블의 모든 레코드를 다시 가져 오는 것입니다.LINQ to Nhibernate Count

여기에 나는 또한 모두가 다시 카운트를 실행하는 대 전체 데이터 세트를 가져

public int GetTotalCount(Func<T, bool> where) 
    { 
     IQueryable<T> queryable = this._sessionManager.GetCurrentSession().Linq<T>(); 
     return queryable.Count(where); 
    } 

점프는 - 시도 내 코드 -

public int GetTotalCount(Func<T, bool> where) { 

      IQueryable<T> queryable = this._sessionManager.GetCurrentSession().Linq<T>().Where(where).AsQueryable(); 
      return queryable.Count(); 

} 

입니다. 어떤 아이디어? 또한

, 나는 그것을 프로파일 NHProf를 사용하여, 그래서있어 내가 할 수있는 것입니다 실행중인 쿼리, 테이블에서

선택 *

귀하의 where 매개 변수가 Expression<Func<T, bool>> 할 필요가
+0

실행중인 NHibernate에 제공하고 NHibernate에 자체에 어떤 Linq에 버전? –

+0

Nhibernate.Linq - 버전 1.1.0.1001 Nhibernate - 버전 2.1.2.4000 – Brian

답변

6

; 그렇지 않으면 메모리에있는 모든 것을로드하고 LINQ-to-objects를 사용합니다. 한마디로

:

public int GetTotalCount(Expression<Func<T, bool>> where) 
{ 
    return _sessionManager 
     .GetCurrentSession() 
     .Linq<T>() 
     .Where(where); 
     .Count(); 
} 
+0

며칠 전에 이것을 알아 냈습니다. 이것이 문제입니다. – Brian

+0

좋은 답변입니다! 나는 where where 절이 쿼리로 변환되지 않은 이유를 놓치고 있었다. –

+0

그러면 어떻게 사용됩니까? – user919426