In LINQ können mehrere Tabellen verknüpft werden, um Daten aus verschiedenen Datenquellen zu kombinieren. In diesem Artikel wird erläutert, wie Sie Multi-Table-Joins mithilfe von Lambda-Ausdrücken in LINQ durchführen.
Sie versuchen, drei Tabellen zu verknüpfen: Product, Category und ProductCategory. Nach der Verkettung möchten Sie eine einzelne Klasse erhalten, die alle relevanten Klasseneigenschaften vereint. Der von Ihnen geschriebene Code scheint jedoch nicht die erwarteten Ergebnisse zu liefern.
Beim Verketten mehrerer Verbindungen in einem LINQ-Lambda-Ausdruck werden Zwischenergebnisse als anonyme Typen dargestellt. Das bedeutet, dass das Ergebnis jedes Joins ein neuer anonymer Typ ist, der die Eigenschaften der verbundenen Tabellen kombiniert.
Um eine einzelne Klasse zu erhalten, die alle relevanten Klassenattribute enthält, müssen Sie die Attribute angeben, die Sie in das Endergebnis einbeziehen möchten. Dies kann mit dem Select-Operator erfolgen.
Das Folgende ist der korrigierte Code:
<code>var categorizedProducts = product .Join(productcategory, p => p.Id, pc => pc.ProdId, (p, pc) => new { p, pc }) .Join(category, ppc => ppc.pc.CatId, c => c.Id, (ppc, c) => new { ppc, c }) .Select(m => new { ProdId = m.ppc.p.Id, // 或 m.ppc.pc.ProdId CatId = m.c.CatId // 其他赋值 });</code>
In diesem Code führen wir zunächst einen Join zwischen drei Tabellen durch und speichern das Ergebnis in einem anonymen Zwischentyp. Anschließend verwenden wir den Select-Operator, um das Endergebnis in einen neuen anonymen Typ zu projizieren, der die erforderlichen Eigenschaften (ProdId und CatId) enthält.
Sie können Ihren Code weiter vereinfachen, indem Sie Abfragesyntax anstelle von Lambda-Ausdrücken verwenden:
<code>var categorizedProducts = from p in product join pc in productcategory on p.Id equals pc.ProdId join c in category on pc.CatId equals c.Id select new { ProdId = p.Id, // 或 pc.ProdId CatId = c.CatId // 其他赋值 };</code>
Die Abfragesyntax ist besser lesbar und leichter zu verstehen, insbesondere bei komplexen Abfragen mit mehreren Verknüpfungen.
Das obige ist der detaillierte Inhalt vonWie kann man mehrere Tabellen mithilfe von LINQ-Lambda-Ausdrücken effizient verknüpfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!