我正在尝试使用LINQ to Nhibernate来计算数据库中的表。但是,我正在运行的代码是拉回表中的所有记录而不是从表中运行select count()。
这是我的代码 -
public int GetTotalCount(Func<T, bool> where) {
IQueryable<T> queryable = this._sessionManager.GetCurrentSession().Linq<T>().Where(where).AsQueryable();
return queryable.Count();
}
我也试过了 -
public int GetTotalCount(Func<T, bool> where)
{
IQueryable<T> queryable = this._sessionManager.GetCurrentSession().Linq<T>();
return queryable.Count(where);
}
两者都拉回整个数据集而不是运行计数。有什么想法吗?
另外,我正在使用NHProf对其进行分析,因此我可以查询它正在运行,这是
选择* 从表
答案 0 :(得分:6)
您的where
参数必须是Expression<Func<T, bool>>
;否则你将所有内容加载到内存中并使用LINQ-to-objects。
简而言之:
public int GetTotalCount(Expression<Func<T, bool>> where)
{
return _sessionManager
.GetCurrentSession()
.Linq<T>()
.Where(where);
.Count();
}