C# Linq类型接口中的外部联接在对';选择many';

C# Linq类型接口中的外部联接在对';选择many';,c#,linq,left-join,outer-join,C#,Linq,Left Join,Outer Join,我正在尝试用Linq编写一个复杂的查询。我有6张桌子 Contract (Zero/One to Many) Agent (PK AgentID) Contract (Zero/One to Many) Customer (PK CustomerID) Contract (Zero/One to Many) Site (PK SiteID) Contract (Zero/One to Many) Supplier (PK SupplierID) Contract (Zero/One to Man

我正在尝试用Linq编写一个复杂的查询。我有6张桌子

Contract (Zero/One to Many) Agent (PK AgentID)
Contract (Zero/One to Many) Customer (PK CustomerID)
Contract (Zero/One to Many) Site (PK SiteID)
Contract (Zero/One to Many) Supplier (PK SupplierID)
Contract (Zero/One to Many) Employee (PK EmployeeID)
我需要编写一个查询,返回所有合同,即使其中任何外键为空

我不确定是使用左外联接还是右外联接。我知道使用左外连接,即使没有子记录,我们也可以检索所有主行。我正试着相反的方法。我写了下面的查询

var contracts1 = (from c in ctx.Contracts
join a in ctx.Agents on c.AgentID equals a.AgentID into ca
from a in ca.DefaultIfEmpty
join cu in ctx.Customers on c.CustomerID equals cu.CustomerID into ccu
from cu in ccu.DefaultIfEmpty
join su in ctx.Suppliers on c.SupplierID equals su.SupplierID into csu
from su in csu.DefaultIfEmpty
join s in ctx.Sites on c.SiteID equals s.SiteID into cs
from s in cs.DefaultIfEmpty
join e1 in ctx.employees on c.EmployeeID equals e1.EmployeeID into ce1
from e1 in ce1.DefaultIfEmpty
select new { c, a, cu, su, s, e1 });
它不编译。错误消息为“类型接口在调用“SelectMany”时失败”

我试着做一些非常简单的事情

from a in ctx.Agents
from c in a.Contracts.DefaultIfEmpty
select new { c, a }
没有“DefaultIfEmpty”它工作正常


非常感谢您的帮助。

在查询中尝试
DefaultIfEmpty()
,而不仅仅是
DefaultIfEmtpy

这是实体框架吗?如果是这样,为什么不使用应该创建的?类型推断。您可能会比较可为null的类型和不可为null的类型。但同样,您应该使用导航属性。如果不需要关联,它们将转换为外部联接。无需执行
DefaultIfEmpty()
@juharr我可以。但我不知道如何连接多个表。是这样的吗。。来自ctx中的a.来自ctx中的c1.来自ctx中的cu.来自ctx中的c2.客户来自ctx中的sup.来自ctx中的c3.供应商来自ctx中的s.站点中的sup.合同来自cu中的c4。来自ctx中e1的合同。来自e1中c5的员工。Contracts@GertArnold有没有办法解决查询中的类型转换问题?你真是个天才。它编译好了,让我检查一下它返回了什么。我会再打给你的。谢谢