Nhibernate-Unterabfrage mit Join mehrerer Spalten
Ich habe eine Datenbankstruktur für Pläne und PlanVersionen in folgender Beziehung:
+------+ +-------------+
| Plan | --------------> | PlanVersion |
+------+ 1 (1..n) +-------------+
PlanVersion ist eine Versionstabelle, die alle Versionsänderungen nachverfolgtActiveFromData undActiveToData Spalten zeigen uns, wann diese Version aktiv war. Plan kann auch Unterpläne enthalten, die sich im Laufe der Zeit ändern können, so dass PlanVersion ebenfalls über Folgendes verfügtParrentPlanId Spalte, die uns sagt, was der aktuelle Teilplan für die Version war.
Was ich will, ist, alle Änderungen aller Unterpläne seit einiger Zeit und für spezifischen Plan zu erhalten. Diese Frage habe ich mitgebracht:
DECLARE @since datetime;
set @since = '2014-08-27 12:00:00.000';
DECLARE @parrentPlan bigint;
set @parrentPlan = 1;
SELECT pv.*
FROM [dbo].[PlanVersion] pv
INNER JOIN
/* Query Over subselect*/
(
SELECT PlanId, MAX(ActiveFromDate) AS MaxActiveFromDate
FROM [dbo].[PlanVersion] pv
WHERE pv.ParentPlanId=@parrentPlan
GROUP BY PlanId
) groupedVersions
ON pv.ParentPlanId = groupedVersions.PlanId
AND pv.ActiveFromDate = groupedVersions.MaxActiveFromDate
WHERE (pv.ActiveFromDate>=@since OR pv.ActiveToDate>@since)
Jetzt möchte ich das in Nhibernate QueryOver übersetzen: Ich habe diesen Code
var subquery = QueryOver.Of<PlanVersion>()
.Where(x => x.ParentPlan.Id == parrentPlanId)
.Select(
Projections.Group<PlanVersion>(e => e.ParrentPlan.Id),
Projections.Max<PlanVersion>(e => e.ActiveFromDate)
);
Aber ich weiß nicht, wie man diese innere Verbindung auf zwei Spalten aus der Abfrage in QueryOver schreibt.
Anmerkungen:
Zum Testen verwenden wir Nhibernate 3.3 mit 4.0Diese Abfrage wird Teil der Umfrage sein, daher ist die Leistung für mich sehr wichtig