對子查詢「IN」參數是否可以使用自定義SQL?目前,我們成功地構建了子查詢(subQueryEstate),但它是一個複雜的SQL塊,可能需要一段時間才能處理大型數據集。該代碼使用我們現有的子查詢生成的查詢如下:NHibernate和自定義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();
的思考?想法?可能有一個我們沒有想過的更優雅的解決方案。
我想使用一個存儲過程,它返回無論是IDS,甚至完全成熟的記錄可能是最好的選擇這裏。 – Rippo 2013-04-09 05:51:25