是否可以将自定义 SQL 用于子查询“IN”参数。目前,我们成功构建了子查询 (subQueryEstate),但它是一个复杂的 SQL 块,可能需要时间来处理更大的数据集。使用我们现有的子查询生成查询的代码如下:
session.QueryOver(() => cAlias)
.WithSubquery.WhereProperty(x => x.CPE.ID).In(subQueryEstate)
.JoinAlias(x => x.Costs, () => aCosts, JoinType.LeftOuterJoin)
.JoinAlias(x => x.Open, () => aOpen, JoinType.InnerJoin)
.List();
为了提高执行速度,我们有一个想法是使用一个临时表(事务生命周期),我们将用 ID 填充该表。这个想法是要么加入临时表,要么使用更简单的子查询(SELECT ID FROM TEMP_TABLE)而不是更复杂的原始查询。
我们可以在 NHibernate 中使用未映射为子查询的表吗?我们可以编写自定义 SQL 或创建一个分离的条件作为参数传递给 IN 子句吗?我们希望保留 NHibernate 为查询的其余部分生成正确 SQL 的事实。
理想情况下是这样的:
session.QueryOver(() => cAlias)
.WithSubquery.WhereProperty(x => x.CPE.ID).In("SELECT ID FROM TEMP_TABLE")
.JoinAlias(x => x.Costs, () => aCosts, JoinType.LeftOuterJoin)
.JoinAlias(x => x.Open, () => aOpen, JoinType.InnerJoin)
.List();
想法?想法?可能有一个我们没有想到的更优雅的解决方案。