nhibernate multicriteria CTE子查询

时间:2010-07-08 13:03:52

标签: sql-server nhibernate criteria-api

我目前有一个MultiCriteria查询,根据子查询中的ID过滤结果

Subqueries.PropertyIn("Id", detachedCriteria)

对于多准则查询中使用的所有查询,子查询都是相同的。

在我的当前情况下重复查询子查询的sql似乎有点难看。

单独查询的原因是每个查询都有不同的连接,并且不希望有一个大规模的笛卡尔连接。

如果我手工编写sql,我会将重复的子查询拉出到公用表表达式

WITH XYZ AS
{
    ....
}

然后子查询将是15个查询中XYZ中的id。

这是一个特定的sql server,另一种选择是临时表或其他数据库特定功能。

有关如何改进查询的任何想法,还是我坚持要复制子查询?

1 个答案:

答案 0 :(得分:1)

好吧,如果您要返回多个结果集,那么使用WITH无法帮助您,因为它只能应用于单个SELECT语句。

无论如何,为了使数据层代码与数据库无关,我可能会将实际的查询逻辑推送到存储过程中。这意味着您可以使用特定于引擎的功能进入城镇,因为它们都隐藏在公共界面后面。是的,您将不得不重新实现您支持的每个数据库引擎的查询(通常很少),但您可以完全控制在每个引擎上运行的内容,并且您的数据访问代码将更加清晰