【问题标题】:What's the better way to implement a condition at NHibernate query?在 NHibernate 查询中实现条件的更好方法是什么?
【发布时间】:2019-03-27 13:22:44
【问题描述】:

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

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

在这种情况下,NHibernate 首先执行 "select * from TEntidade" 将所有信息带到内存中,然后执行 "where" 条件。这需要很多时间。

有没有更好的方法?

【问题讨论】:

  • 为什么不使用实体框架,(不确定NHibernate)但是EF 将where 转换为SQL 中的WHERE 子句,并且不会提取内存中的所有记录来进行过滤。
  • 这里的所有应用程序都使用 NHibernate。如果没有大的影响,我无法更改为 EF。
  • 改用Expression&lt;Func&lt;TEntidade, bool&gt;&gt; where 试试
  • 就是这样! Expression&lt;Func&lt;TEntidade, bool&gt;&gt; where 工作。谢谢!

标签: c# nhibernate orm


【解决方案1】:

问题已通过Expression&lt;func&gt; 解决。

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

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

@RomanArtiukhin 在 cmets 的问题中也提到了这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2016-09-03
    • 1970-01-01
    • 2011-04-03
    • 2019-07-30
    相关资源
    最近更新 更多