我目前有一个MultiCriteria查询,根据子查询中的ID过滤结果
Subqueries.PropertyIn("Id", detachedCriteria)
对于多准则查询中使用的所有查询,子查询都是相同的。
在我的当前情况下重复查询子查询的sql似乎有点难看。
单独查询的原因是每个查询都有不同的连接,并且不希望有一个大规模的笛卡尔连接。
如果我手工编写sql,我会将重复的子查询拉出到公用表表达式
中WITH XYZ AS
{
....
}
然后子查询将是15个查询中XYZ中的id。
这是一个特定的sql server,另一种选择是临时表或其他数据库特定功能。
有关如何改进查询的任何想法,还是我坚持要复制子查询?
答案 0 :(得分:1)
好吧,如果您要返回多个结果集,那么使用WITH
无法帮助您,因为它只能应用于单个SELECT
语句。
无论如何,为了使数据层代码与数据库无关,我可能会将实际的查询逻辑推送到存储过程中。这意味着您可以使用特定于引擎的功能进入城镇,因为它们都隐藏在公共界面后面。是的,您将不得不重新实现您支持的每个数据库引擎的查询(通常很少),但您可以完全控制在每个引擎上运行的内容,并且您的数据访问代码将更加清晰