在NHibernate查询中实现条件的更好方法是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在NHibernate查询中实现条件的更好方法是什么?相关的知识,希望对你有一定的参考价值。

我正在使用来自NHibernate的Query的泛型实现。 我的方法:

public IEnumerable<TEntidade> ObterEntidadesPor(Func<TEntidade, bool> where)
        {
            return SessionNH.Query<TEntidade>().Where(where);
        }

在这种情况下,NHibernate首先做“select * from TEntidade”将所有信息带到内存之后,他实现了“where”条件。这花费了很多时间。

有没有更好的方法呢?

答案

Expression<func>解决了这个问题。

public IEnumerable<TEntidade> ObterEntidadesPor(Expression<Func<TEntidade, bool>> where)
{
    return SessionNH.Query<TEntidade>().Where(where);
}

在搜索答案时,一位同事告诉我,Func在构建表达式之前执行查询。要在执行查询之前构建表达式,我们必须使用Expression

@RomanArtiukhin在对问题的评论中也提到了这一点。

以上是关于在NHibernate查询中实现条件的更好方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章

实体框架与 NHibernate - 性能

如何在子查询中实现多列过滤

与 NHibernate 和标准联合?

如何在hibernate中实现对两个表的查询数据?

如何使用 LINQ 在 NHibernate 3 中实现关键字搜索?

动态添加投影到 NHibernate 查询