Kommend von T-SQL, ich versuche, mit einem Basisdatensatz in einem Beispiel ASP.Net mvc (C#) Programm zu arbeiten.Linq - Join auf Primärschlüssel der verbundenen Tabelle
Ich habe drei Tabellen wie unten im Bild (verlinkt) gezeigt:
- Sammlungen (PK IdCollection)
- Sprint (PK IdSprint, FK IdCollection)
- DeployDocuments (PK IdDeployDocuments, FK IdSprint )
In meiner asp.net Mvc cont Walze, würde Ich mag die Linq Äquivalent-Datensatz dieser einfachen Abfrage zu der Ansicht zu übergeben:
SELECT
c.TxCollectionName
,s.SprintNumber
,COUNT(dd.IdDeployDocument) [NumProjects]
FROM Collections AS c
JOIN Sprints AS s
ON s.IdCollection = c.IdCollection
LEFT JOIN DeployDocuments AS dd
ON dd.IdSprint = s.IdSprint
GROUP BY
c.TxCollectionName
, s.SprintNumber;
Ich kann nicht für das Leben von mir, herauszufinden, wie dies zu tun! Sobald ich versuche, eine zweite Verknüpfung in linq (geschweige denn eine linke Join) zu erstellen.
Ich war vorher nur mit:
var CollectionSprints = db.Collections.Include(d => d.Sprints)
Aber ich brauche die Summe aller Projekte (deployDocuments) als auch, so dass nun eine Abfrage zu feilschen zusammen wie ich versuche, so:
var query = from Collections in db.Collections
join Sprints in db.Sprints on Collections.IdCollection equals Sprints.IdCollection
join DeployDocuments in db.DeployDocuments on DeployDocuments.IdSprint equals Sprints.IdSprint
aber sobald ich zum zweiten Join komme, wirft es Fehler ab, gibt es eine Einschränkung von linq, die ich lesen sollte? Gibt es einen völlig anderen Ansatz, den ich zur Lösung dieses Problems ergreifen sollte? Oder sollte ich nur GTFO und nehmen mehr Kurse über C#
Warum können Sie nicht eine gespeicherte Prozedur für diesen Einsatz? Sind Sie entschlossen, LINQ zu verwenden? –
Ich kann absolut eine gespeicherte Prozedur mit diesem verwenden, ich habe noch nicht gelernt, wie gespeicherte Prozeduren mit asp.net mvc zu verwenden, aber ich bin sicher, dass ich schnell genug lernen kann. Ist das eine "komplexe" Abfrage in linq? ** edit: ** Ich denke, meine Wahrnehmung ist ein wenig verzerrt, weil ich nicht daran gewöhnt bin, Stored Procedures für Abfragen von weniger als 10-15 Zeilen zu erstellen, ist es die beste Vorgehensweise, SPs für alles zu verwenden, was nicht ' t eine "grundlegende" Abfrage? –
Mit dem 'LEFT JOIN' kann es kompliziert werden. Ich sage nicht, dass es nicht machbar ist, nur mit Ihrem Niveau, es könnte einfacher sein, mit einer gespeicherten Prozedur zu gehen. –