Ein kleiner Hintergrund zur Abfrage unten. Zelle hat ein 1: M zu Container und ein 1: M mit Drucker. Ich möchte eine Abfrage, die alle Zellen und zugehörigen Container, sofern vorhanden, und die zugehörigen Drucker, sofern vorhanden, abrufen. Im Wesentlichen möchte ich eine linke äußere Verbindung auf beiden Tabellen tun. Hier ist die Abfrage, die ich habe:Wie macht man mehrere linke äußere Joins in einer Linq-Abfrage?
var query = from cell in Cell
join container in Container.Where (row => row.SerialNumber == "1102141") on cell.CellID equals container.CellID
into containers
join printer in Printer.Where (row => row.Name == "PG10RelWarrPrt3") on cell.CellID equals printer.CellID
into printers
select new { Cell = cell, Containers = containers, Printers = printers };
query.Dump();
Diese Abfrage funktioniert, ist aber nicht effizient. Es führt einen linken äußeren Join für Container aus, führt jedoch für jede Zelle eine separate Abfrage durch, um alle Druckerzeilen abzurufen, anstatt einen linken äußeren Join auf Printer auszuführen.
Wie kann ich dies ändern, so dass es auch eine linke äußere Verknüpfung in der Tabelle Printer macht? BTW, ich möchte eine hierarchische Ergebnismenge. IOW, jede Zelle sollte eine Liste von Containern und eine Liste von Druckern haben. Jeder wäre natürlich leer, wenn für die Zelle keiner existiert.
http://stackoverflow.com/questions/267488/linq-to-sql-multiple-left-outer-joins – diceguyd30
@ diceguyd30 - Ich sah, dass, bevor ich meine Frage gestellt. Das löst mein Problem nicht. Beachten Sie, dass ich sage, dass ich eine hierarchische Ergebnismenge haben möchte, nicht eine flache. DefaultIfEmpty() ist für flache Ergebnismengen. –