【问题标题】:LINQ TO Nhibernate CountLINQ TO 休眠计数
【发布时间】:2010-01-31 03:24:50
【问题描述】:

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

选择 * 从表

【问题讨论】:

  • 您运行的是什么版本的 Linq to NHibernate 提供程序和 NHibernate 本身?
  • Nhibernate.Linq - 版本 1.1.0.1001 Nhibernate - 版本 2.1.2.4000

标签: linq nhibernate


【解决方案1】:

您的where 参数必须是Expression&lt;Func&lt;T, bool&gt;&gt;;否则,您将在内存中加载所有内容并使用 LINQ-to-objects。

简而言之:

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

【讨论】:

  • 几天前发现了这一点。这就是问题所在。
  • 很好的答案!我不知道为什么我的 where 子句没有被翻译成查询。
  • 这将如何使用?
猜你喜欢
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 2011-06-30
  • 1970-01-01
相关资源
最近更新 更多