在 NHibernate 查询中实现条件的更好方法是啥?
Posted
技术标签:
【中文标题】在 NHibernate 查询中实现条件的更好方法是啥?【英文标题】: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<Func<TEntidade, bool>> where
试试
就是这样! Expression<Func<TEntidade, bool>> where
工作。谢谢!
【参考方案1】:
问题已通过Expression<func>
解决。
public IEnumerable<TEntidade> ObterEntidadesPor(Expression<Func<TEntidade, bool>> where)
return SessionNH.Query<TEntidade>().Where(where);
在寻找答案时,一位同事告诉我,Func
在构建表达式之前执行查询。要在执行查询之前构建表达式,我们必须使用Expression
。
@RomanArtiukhin 在 cmets 的问题中也提到了这一点。
【讨论】:
以上是关于在 NHibernate 查询中实现条件的更好方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章