关于下面的查询的一点背景。细胞有1:M到容器和1:M与打印机。我想要一个查询,它将检索所有单元格和关联的容器(如果它们存在)以及关联的打印机(如果存在)。基本上我想在两个表上做一个左外连接。以下是我的查询:如何在Linq Query中执行多个左外连接?
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();
此查询有效,但效率不高。它在Container上执行左外连接,但对于每个单元,它执行单独的查询来检索任何Printer行,而不是在Printer上执行左外连接。
我该如何改变它,以便它还在打印机表上进行左外连接?顺便说一句,我想要一个分层结果集。 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