我正在使用来自NHibernate的Query的泛型实现。
我的方法:
public IEnumerable<TEntidade> ObterEntidadesPor(Func<TEntidade, bool> where) { return SessionNH.Query<TEntidade>().Where(where); }
在这种情况下,NHibernate首先做">从TEntidade中选择*"将所有信息带到内存之后,他实现了"where">条件。这需要很多时间。
有没有更好的方法?
这个问题用Expression<func>
解决了。
public IEnumerable<TEntidade> ObterEntidadesPor(Expression<Func<TEntidade, bool>> where)
{
return SessionNH.Query<TEntidade>().Where(where);
}
在寻找答案时,一位同事告诉我,Func
在构建表达式之前执行查询。要在执行查询之前构建表达式,我们必须使用 Expression
.
@RomanArtiukhin在对问题的评论中也提到了这一点。