Vergleich von Join und GroupJoin in LINQ to Entities
GroupJoin verstehen
GroupJoin ist wie Join eine LINQ-Methode zum Kombinieren mehrerer Datenquellen. Allerdings erzeugt GroupJoin Ergebnisse mit einer anderen Struktur als Join.
Beitreten:
- Führen Sie einen Inner Join durch und generieren Sie nur Zeilen, in denen es Übereinstimmungen in beiden verbundenen Tabellen gibt.
- Ergebnis: Eine zusammengeführte Tabelle, die Spalten aus beiden Tabellen enthält.
Gruppenbeitritt:
- Führen Sie einen Outer-Join durch, um Zeilen in der ersten Tabelle mit Zeilen in der zweiten Tabelle abzugleichen.
- Ergebnis: Eine Sammlung von Gruppen, wobei jede Gruppe eine Zeile aus der ersten Tabelle und die entsprechende Zeile aus der zweiten Tabelle enthält (oder eine leere Liste, wenn keine Übereinstimmung vorhanden ist).
Grammatik
Abfragesyntax:
Beitreten:
<code>from p in Parent
join c in Child on p.Id equals c.Id
select new { p.Value, c.ChildValue }</code>
Nach dem Login kopieren
Gruppenbeitritt:
<code>from p in Parent
join c in Child on p.Id equals c.Id into g
select new { Parent = p, Children = g }</code>
Nach dem Login kopieren
Methodensyntax (seltener verwendet):
Beitreten:
<code>Parent.Join(Child, p => p.Id, c => c.Id, (p, c) => new { p.Value, c.ChildValue })</code>
Nach dem Login kopieren
Gruppenbeitritt:
<code>Parent.GroupJoin(Child, p => p.Id, c => c.Id, (p, c) => new { Parent = p, Children = c })</code>
Nach dem Login kopieren
Anwendungsfälle
1. Flache Außenverbindung erzeugen:
- GroupJoin kann verwendet werden, um einen abgeflachten äußeren Join zu erstellen, der jede Zeile in der ersten Tabelle enthält, auch wenn es in der zweiten Tabelle keine passenden Zeilen gibt. Dies wird durch eine Abflachung der Gruppe erreicht:
<code>from p in Parent
join c in Child on p.Id equals c.Id into g
from c in g.DefaultIfEmpty()
select new { Parent = p.Value, Child = c?.ChildValue }</code>
Nach dem Login kopieren
2. Ordnung halten:
- Join kann zum Filtern einer Liste unter Beibehaltung der Reihenfolge der Elemente verwendet werden. Durch die Verwendung einer externen Sequenz als erste Liste können Sie die Reihenfolge der Elemente aus der zweiten Liste beibehalten:
<code>from id in ids
join p in parents on id equals p.Id
select p</code>
Nach dem Login kopieren
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen den Join- und GroupJoin-Methoden von LINQ?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!