Heim > Datenbank > MySQL-Tutorial > Wie kann man eine komplexe SQL -Abfrage mit mehreren Verknüpfungen und Zählungen in Linq effizient übersetzen?

Wie kann man eine komplexe SQL -Abfrage mit mehreren Verknüpfungen und Zählungen in Linq effizient übersetzen?

Linda Hamilton
Freigeben: 2025-01-25 04:44:09
Original
787 Leute haben es durchsucht

How to Efficiently Translate a Complex SQL Query with Multiple Joins and Counts into LINQ?

SQL mit mehreren Verbindungen, Zählen und linken Verbindungen zu Linq

SQL Query

Betrachten Sie die folgende 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>
Nach dem Login kopieren
linq Query Expression

Um diese SQL -Abfrage in den Ausdruck von linq -Abfragen umzuwandeln, folgen Sie den folgenden Kriterien:

    Konvertieren Sie die Abfrage in die Variablen separater Deklarationen.
  1. In der Reihenfolge von Linq -Klauseln jede Klausel in der Reihenfolge umwandeln.
  2. Konvertieren Sie Join -Klauseln in Navigationsattribute oder anonyme Objekte.
  3. Verwenden Sie und
  4. , um den linken Join zu simulieren. GroupJoin DefaultIfEmpty()
  5. Wenden Sie diese Regeln an, um den folgenden LINQ -Query -Ausdruck zu generieren:

lambda Expression
<code class="language-csharp">var subrq = from r in Table_R
            group r by r.Id into rg
            select new { Id = rg.Key, cnt = rg.Count() };

var ansq = (from c in Table_C
            join v in Table_V on c.Id equals v.Id
            join r in subrq on c.Id equals r.Id into rj
            from r in rj.DefaultIfEmpty()
            where c.IdUser == "1234"
            group new { c, v, r } by new { c.Id, c.Title, r.cnt } into cvrg
            select new {
                cvrg.Key.Title,
                Nb_V2 = cvrg.Count(),
                Nb_V1 = cvrg.Select(cvr => cvr.v.IdUser).Distinct().Count(),
                Nb_R = (int?)cvrg.Key.cnt
            }).Distinct();</code>
Nach dem Login kopieren

Für die Konvertierung von Lambda -Ausdrücken konvertieren Sie die linke Links weiter mit

:

GroupJoin...SelectMany

Das obige ist der detaillierte Inhalt vonWie kann man eine komplexe SQL -Abfrage mit mehreren Verknüpfungen und Zählungen in Linq effizient übersetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage