5
我想要做的是顯示一個簡單的數據網格,其中包含實體數據及其子集合的數據。例如,讓我們使用訂單和訂單項。我想要顯示訂單信息和訂單項的數量。NHibernate QueryOver選擇實體和聚合
訂單ID,訂購日期,NumOfLineItems
現在通常在SQL你可以做很多方面。但這是我能想到的,在翻譯爲NHibernate時可能會奏效的唯一方法。
SELECT o.OrderID, OrderDate, NumOfLineItems
FROM #Orders o
INNER JOIN
(SELECT o2.OrderID, COUNT(*) As NumOfLineItems FROM #LineItems l
INNER JOIN #Orders o2 ON o2.OrderID = l.OrderID
WHERE UserID = 1 GROUP BY o2.OrderID) t1 ON o.OrderID = t1.OrderID
WHERE UserID = 1
我知道還有其他的方法,但我想要考慮NHibernate允許我使用QueryOver語法的方法。我不想使用派生列。我試圖避免編寫SQL。
對於我的實體,我有一個Order實體和一個AggregatedOrder實體,在這種情況下它將成爲我的DTO,並且我打算使用變換器aliastobean將數據複製到它。
我只是完全不知道如何解決這個問題。
所有我到目前爲止有:
QueryOver<LineItem> x = QueryOver.Of<LineItem>()
.SelectList(p => p .SelectCount(l => l.Id).WithAlias(() => itemAlias.NumOfLineItems))
.JoinQueryOver<Order>(l => l.Order)
.Where(o => o.UserID == userID)
var y = session.QueryOver<Listing>()
.JoinQueryOver<Bid>(x); // no idea whats going on here
:
要使用QueryOver API,你可以做以下查詢訂單+聚合的LineItem的投影那是令人沮喪的。不得不指定每一列將是一場噩夢=) – BradLaney
@ user745537是的我可以相信這將是一個痛苦。我會看看我是否可以找出其他解決方案。 –
@ user745537有一段時間來思考它,我不知道你想做什麼的方式。另一個可能的解決方案是使用兩個查詢(一個用於實體,一個用於聚合計數),並使用LINQ將它們連接在內存中。 –