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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage