linq to sql查询预编译

时间:2011-08-02 13:23:05

标签: linq-to-sql pre-compilation

如果where子句中有条件逻辑,则根据搜索参数的值,linq可以构建不同的sql查询。

在这种情况下如何利用查询预编译并将条件纳入帐户?看起来必须生成一个以上的预编译查询。然后需要根据输入参数触发正确的预编译查询。

大多数博客条目/文章都非常有限,只有在查询中没有条件逻辑时才处理linq查询预编译。然后他们只是在小字体中提到查询预编译并不总是有益的,你可能最好不要使用它。

例如,如果linq查询中有一个条件参数,则可以构建2个不同的sql查询。那么为什么不预先编译这两个linq查询并相应地重用呢?我敢肯定,如果你多次重复使用不同的预编译查询,那么最终会节省一些处理能力。

我提出这个问题的原因是我目前正在开发一个具有相当复杂的搜索表单的webapp。典型的搜索表单可以包含大约20个字段(字符串,整数,下拉列表等)。 95%的搜索使用默认参数。但其他搜索使用多个搜索参数。底层linq查询将所有参数带入帐户,语法非常好,尤其是可以为空的整数,例如:.Where(row =>!model.id.HasValue || row.id == model.id)。那么根据int是否可以生成两个不同的sql查询? id有价值与否。而且我的where子句要复杂得多 - 它需要大约20个条件参数。

所以问题是:如果我根据条件参数预编译linq查询,它是否会有益于性能?这将导致每个组合参数的预编译查询。因此,必须分析参数,以便确定预编译查询是否已存在且是否可以使用,或者是否需要创建新的预编译查询。

此解决方案可以在以后更进一步。因此,当Web应用程序启动时,所有linq查询都将针对条件参数的所有可能组合进行主动预编译。或者,为了减少预编译查询的数量,我可以将预编译用于几个最常用的混淆参数组合,并强制使用非预编译查询来处理更复杂的场景。

0 个答案:

没有答案