基本上在我的应用程序中,我使用以下代码根据页面上的选择来构建我的表达式。
Expression<Func<T, bool>> expr = PredicateBuilder.True<T>();
expr = expr.And(b => b.Speed >= spec.SpeedRangeFrom && b.Speed <= spec.SpeedRangeTo);
...
它倾向于以带有多个“或”和“与”条件的长表达式结束。
完成表达式的构建后,我将其传递到我的存储库,如下所示:
var results = Session.Query<T>().Where(expr).ToList();
问题是花了很长时间才给我返回结果。我还注意到,表达式越长,返回结果集所需的时间就越长。
我还使用 NHibernate profiler 来分析生成的 sql 语句。在 SQL Server Studio 上单独运行 sql 语句,只用了不到 1s。
在我看来,大部分时间都花在构建表达式或将表达式转换为 sql 语句上。
有没有办法解决这个问题?
我没有太多使用 NHibernate 的经验。如果有人能对此有所了解,那就太好了。
提前感谢您抽出宝贵时间阅读本文。