Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine komplexe SQL -Abfrage mit mehreren Verknüpfungen, Zählen und einer linken Verbindung in das linq -Äquivalent übersetzen?
Konvertieren Sie SQL, das mehrere Joins, COUNTs und Left-Joins enthält, in LINQ
Die angegebene SQL-Abfrage enthält mehrere Joins (einschließlich Links-Joins) und Aggregationen unter Verwendung der Funktionen COUNT und COUNT(DISTINCT). Das Ziel besteht darin, diese Abfrage in ihr LINQ-Äquivalent zu konvertieren, um sie in der Datenzugriffsschicht der Anwendung zu verwenden.
SQL-Abfrage:
<code class="language-sql">SELECT DISTINCT c.Id, c.Title, COUNT(v.Id) AS 'Nb_V2', COUNT(DISTINCT v.IdUser) AS 'Nb_V1', r.cnt AS 'Nb_R' FROM TABLE_C c JOIN TABLE_V v on c.Id = v.Id LEFT JOIN ( SELECT Id, COUNT(*) AS cnt FROM TABLE_R GROUP BY Id ) r ON c.Id = r.Id WHERE c.IdUser = '1234' GROUP BY c.Id, c.Title, r.cnt</code>
LINQ-Abfrageverständnis:
Eine Möglichkeit, SQL-Abfragen in LINQ-Abfrageverständnisse umzuwandeln, ist die Verwendung verschachtelter Joins und anonymer Typgruppierung. Allerdings kann die Konvertierung der Funktionen COUNT und COUNT(DISTINCT) in die LINQ-Syntax eine Herausforderung sein.
Lambda-Ausdruck:
Eine sauberere Lösung für LINQ-Transformationen kann mithilfe von Lambda-Ausdrücken implementiert werden. Durch die Nutzung der Operation „join...selectMany“ und der Gruppierung kann die Abfrage wie folgt geschrieben werden:
<code class="language-csharp">var ans2 = Table_C.Where(c => c.IdUser == "1234") .Join(Table_V, c => c.Id, v => v.Id, (c, v) => new { c, v }) .GroupJoin(Table_R.GroupBy(r => r.Id).Select(rg => new { Id = rg.Key, cnt = rg.Count() }), cv => cv.c.Id, r => r.Id, (cv, rj) => new { cv.c, cv.v, rj }) .SelectMany(cvrj => cvrj.rj.DefaultIfEmpty(), (cvrj, r) => new { cvrj.c, cvrj.v, r }) .GroupBy(cvr => new { cvr.c.Id, cvr.c.Title, cvr.r?.cnt }) //处理r可能为空的情况 .Select(cvrg => new { cvrg.Key.Title, Nb_V2 = cvrg.Count(), Nb_V1 = cvrg.Select(cvr => cvr.v.IdUser).Distinct().Count(), Nb_R = cvrg.Key.cnt });</code>
Übersetzungsleitfaden:
Um SQL-Abfragen effizient in LINQ zu konvertieren, können die folgenden Richtlinien angewendet werden:
r
leer sein kann, und fügen Sie entsprechende Nullwertprüfungen in GroupBy
und Select
hinzu. Diese überarbeitete Antwort verbessert die LINQ-Abfrage, indem sie den potenziellen Nullwert von r.cnt
in den Klauseln GroupBy
und Select
behandelt, wodurch sie robuster wird. Der Rest der Erklärung bleibt gleich , Bereitstellung einer klaren und genauen Übersetzungsanleitung von SQL nach LINQ.
Das obige ist der detaillierte Inhalt vonWie kann ich eine komplexe SQL -Abfrage mit mehreren Verknüpfungen, Zählen und einer linken Verbindung in das linq -Äquivalent übersetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!