Немного фона по запросу ниже. Ячейка имеет контейнер 1: M и контейнер 1: M с принтером. Я хочу получить запрос, который будет извлекать все ячейки и связанные с ними контейнеры, если они существуют, и связанные с ними принтеры, если они существуют. По сути, я хочу сделать левое внешнее соединение на обеих таблицах. Вот мой запрос:Как сделать несколько левых внешних соединений в запросе Linq?
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();
Этот запрос работает, но не эффективен. Он выполняет левое внешнее соединение в контейнере, но для каждой ячейки он выполняет отдельный запрос для извлечения любых строк принтера вместо того, чтобы выполнять левое внешнее соединение на принтере.
Как я могу изменить это так, чтобы он также выполнял левое внешнее соединение на столе принтера? BTW, мне нужен иерархический набор результатов. IOW, каждая ячейка должна иметь список контейнеров и список принтеров. Разумеется, каждый из них будет пустым, если для ячейки не существует.
http://stackoverflow.com/questions/267488/linq-to-sql-multiple-left-outer-joins – diceguyd30 2010-11-24 13:23:21
@ diceguyd30 - Я видел это, прежде чем отправил свой вопрос. Это не решает мою проблему. Обратите внимание, что я утверждаю, что хочу получить иерархический результирующий набор, а не плоский. DefaultIfEmpty() для плоских наборов результатов. – 2010-11-24 13:28:12