konvertiert Ihre SQL -Abfrage verwendet mehrere Verbindungen, linke Verbindungen und Polymerisierungsfunktionen, um Daten aus mehreren Tabellen abzurufen. Folgen Sie die folgenden Schritte, um diese Abfrage in LinQ zu konvertieren:
sub -query konvertieren:
Diese verbesserte LINQ -Abfrage übernimmt die Zählfunktion und habe den Job prägnanter und effizienter gelassen und vermeiden einige potenzielle Probleme im ursprünglichen Code, wie das seltsame Urteil über
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
null ist. Es spiegelt genauer die Logik der ursprünglichen SQL -Abfrage wider. Bitte beachten Sie, dass Sie sich entsprechend Ihrem Datenbankkontext und Ihrem physischen Namen , und
anpassen müssen.var qResult = (from c in dbContext.TABLE_C join v in dbContext.TABLE_V on c.Id equals v.Id from r in dbContext.TABLE_R.Where(r => r.Id == c.Id).DefaultIfEmpty() where c.IdUser == "1234" group new { c, v, r } by new { c.Id, c.Title } into grouped select new { IdC = grouped.Key.Id, Title = grouped.Key.Title, Nb_V2 = grouped.Count(g => g.v.Id != null), Nb_V1 = grouped.Select(g => g.v.IdUser).Distinct().Count(), Nb_R = grouped.Sum(g => (int?)g.r.cnt ?? 0) // 处理r.cnt可能为null的情况 }).Distinct();
Das obige ist der detaillierte Inhalt vonWie kann ich eine komplexe SQL -Abfrage mit mehreren Verknüpfungen, Zählungen und einer linken Verbindung zu Linq übersetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!