1
我已經制作了兩個查詢,這兩個查詢都可以正常工作,但我真的很難理解如何組合它們。我認爲我最大的問題是,我對查詢使用了兩種不同的語法,但我不確定如何在不使用「SQL-esque」標記的情況下表達我的第一個查詢。努力結合兩個NHibernate查詢,其中我交叉結果
List<Task> tasksFromQueue = NHibernateSession.CreateQuery(
"Select t from Task t, QueueLocation q where q.Queue.ID = :queueID and (t.SiteID = q.ComponentID or t.OriginalSiteID = q.ComponentID)")
.SetParameter("queueID", queueID).List<Task>().ToList();
List<Task> tasksFromWorkflow = NHibernateSession
.CreateCriteria(typeof(Task), "Task")
.CreateCriteria("Task.Order", "Order")
.CreateAlias("Task.TaskDevice", "TaskDevice").List<Task>();
IEnumerable<Task> tasks = tasksFromWorkflow.Intersect(tasksFromQueue);
正如你可以看到我有兩個問題:
- 使用詳細的語法爲第一查詢和NHibernate的加價第二查詢。
- 敲擊DB兩次,然後與結果相交。
tasksFromWorkflow查詢實際上比上面看到的要複雜得多。如果您希望查看整個查詢click here.我不確定額外的代碼是否真的改變了我的問題 - 所以我決定儘可能縮短顯示的代碼片段,同時仍然解釋問題。
我讀過NHibernate doesn't support intersection,所以也許不可能在一個查詢中實現而不會變得非常複雜?
我清理爲tasksFromQueue分離的標準代碼,但它出錯了,當我試圖運行它。這顯然不是從我的原始任務FromQueue查詢的直接翻譯。我會盡量在今天晚些時候再玩一下。 –
你可以發佈查詢,如果它運行?我相信會有其他人有你的用例 – Firo