LINQ TO Nhibernate计数[英] LINQ TO Nhibernate Count

本文是小编为大家收集整理的关于LINQ TO Nhibernate计数的处理/解决方法,可以参考本文帮助大家快速定位并解决问题,中文翻译不准确的可切换到English标签页查看源文。

问题描述

我正在尝试使用 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 对其进行分析,因此我可以查询它正在运行的查询,即

选择 *从表

推荐答案

你的where参数需要是一个Expression<Func<T, bool>>;否则,您将在内存中加载所有内容并使用 LINQ-to-objects.

简而言之:

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

本文地址:https://www.itbaoku.cn/post/1556821.html

问题描述

I am trying to use LINQ to Nhibernate to get a count on a table in my database. However, the code I am running is pulling back all of the records in the table versus running select count() from table.

Here's my code-

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

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

}

I also tried-

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

Both pull back the entire dataset versus running a count. Any ideas?

Also, I'm using NHProf to profile it, so I can the query it is running, which is

select * from table

推荐答案

Your where parameter needs to be an Expression<Func<T, bool>>; otherwise you are loading everything in memory and using LINQ-to-objects.

In short:

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