如果 where 子句中有条件逻辑,linq 可以根据搜索参数的值构建不同的 sql 查询。
在这种情况下如何利用查询预编译并将条件考虑在内?看起来必须生成一个以上的预编译查询。然后需要根据输入参数触发正确的预编译查询。
大多数博客条目/文章都非常有限,并且仅在查询中没有条件逻辑时才处理 linq 查询预编译。然后他们只是在小字中提到查询预编译并不总是有益的,你最好不要使用它。
例如,如果 linq 查询中有一个条件参数,则可以构建 2 个不同的 sql 查询。那么为什么不预编译这两个 linq 查询并相应地重用呢?我敢肯定,如果您多次重复使用不同的预编译查询,那么它最终会节省一些处理能力。
我提出这个问题的原因是我目前正在开发一个具有相当复杂的搜索表单的 web 应用程序。典型的搜索表单可以有大约 20 个字段(字符串、整数、下拉列表等)。95% 的搜索使用默认参数。但其他搜索使用多个搜索参数。底层 linq 查询将所有参数纳入帐户,语法非常好,尤其是可以为空的整数,例如:.Where(row=>!model.id.HasValue || row.id==model.id)。所以根据是否int可以产生两个不同的sql查询?id 是否有价值。而我的 where 子句要复杂得多——它需要大约 20 个条件参数。
所以问题是:如果我根据条件参数预编译 linq 查询,是否会提高性能?这将导致每个条件参数组合的预编译查询。因此,必须分析参数以确定预编译查询是否已经存在并且可以使用,或者是否需要创建新的预编译查询。
该解决方案可以在以后进一步采取。因此,当 Web 应用程序启动时,所有 linq 查询都将针对所有可能的条件参数组合进行主动预编译。或者,为了减少预编译查询的数量,我可以对少数最常用的条件参数组合使用预编译,并在更复杂的场景中强制使用未预编译的查询。