2010-01-28 57 views
2

我想用LINQ到Nhibernate來獲得我的數據庫中的表計數。但是,我正在運行的代碼將撤回表中的所有記錄,而不是從表中運行select count()。LINQ到Nhibernate計數

這裏是我的代碼 -

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

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

} 

我也tried-

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

雙方拉回到整個數據集與運行計數。有任何想法嗎?

而且,我使用NHProf剖析它,這樣我就可以運行它的查詢,這是

SELECT * 從表

+0

正在運行什麼LINQ的版本NHibernate的供應商和NHibernate本身? – 2010-01-28 23:54:47

+0

Nhibernate.Linq - 版本1.1.0.1001 Nhibernate - 版本2.1.2.4000 – Brian 2010-01-29 00:15:16

回答

6

where參數需要一個Expression<Func<T, bool>>;否則你正在加載內存中的所有東西,並使用LINQ到對象。

簡而言之:

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

在兩天前計算出來。這是問題。 – Brian 2010-01-31 13:19:57

+0

很好的回答!我不知道爲什麼我的where子句沒有被翻譯成查詢。 – 2011-01-28 09:01:33

+0

這將如何被使用? – user919426 2014-12-12 11:17:34