2012-04-10 6 views
0

ich diese 3 Tabellen:Wie die Eltern erhalten und nur das erste Kind einer verwandten Tabelle

Prozess, Aktion und Process_Actions (viele zu viele, die alle Aktionen registrieren, die ein Prozess ausführen kann diese Tabelle. Grundsätzlich hat pROCESS_ID, Action_Id und eine eindeutige Kennung (für die Bestellung).

Was ich will, eine LINQ-Abfrage ist eine Liste aller Prozess und erhält nur die letzte Aktion (geordnet nach Datum zu erhalten)

das ist mein Arbeits SQL-Abfrage:

SELECT P.Id, P.Name, PA.Action_Id FROM Process P 
    JOIN Process_Actions PA ON P.Id = PA.Process_Id 
    WHERE PA.Id IN (SELECT MAX (PA.Id) FROM Process_Actions INNER JOIN Process_Actions PA ON P.Id = PA.Process_Id) 
+0

Hmmm ... Ich sehe die Action-Referenz in Ihrem T-SQL-Beispiel nicht. –

+0

Ich brauche nur die Action_Id, referenziert in Process_Actions –

Antwort

1

Versuchen Sie dieses versuchen würde:

context.Processes.Select(p => new { Process = p, 
    LastAction = p.Actions.OrderbyDescending(a => a.Date).FirstOrDefault() }) 

Unter der Annahme, dass Action eine Eigenschaft hat Date (wie Sie sagen nach Datum sortiert).

0

ich so etwas wie dieses

var maxId = (from pa in context.Process_Actions 
join pa on pa.Id = pa.Process_Id) 
select (int?)pa.Id).Max(); 

var query = from p in context.Process 
join pa in context.Process_Actions on p.Id equals pa.Process_Id 
where maxId.Contains(pa.Id) 
select new 
{ 
    p.Id, 
    p.Name, 
    pa.Action_Id 
}