使用外连接在LINQ to SQL中选择多个一对多关系

时间:2010-07-22 15:41:51

标签: c# .net linq linq-to-sql c#-4.0

我正在使用.NET 4和VS 2010,并且在.NET 3.5 / VS 2008中存在相同的问题

结构:
表1:呼叫
表2:AddressChangeRequest
表3:CallNotes

单个呼叫可以有许多AddressChangeRequests和许多CallNotes。客户(customerKey)可以有多个呼叫。

LINQ代码:
    return db.Calls.Where(c => c.CustomerKey =='...')。选择(     c => new Call(c.CustomerKey,c.StartTime,c.AddressChangeRequests,c.CallNotes));

Call是一个域对象,需要一个AddressChangeRequests和CallNotes列表。代码按预期返回一个Call列表,但SQL不是最佳的。

上面的代码从Call表中生成SQL作为一个SELECT,在AddressChangeRequest表上有一个左外连接,后跟来自CallNote表的单独SELECT查询(每个关联的Call一个)

Select ... from Call as c
LEFT OUTER JOIN AddressChangeRequest as acr ON c.id = acr.callId

Select ... from CallNote Where callId = 123
Select ... from CallNote Where callId = 456
Select ... from CallNote Where callId = 789

如果从代码中删除AddressChangeRequests,则会为CallNote表生成左外连接,并且不再生成单独的Select语句。

我的问题是,使用LINQ如何生成单个SQL语句如下:

Select ... from Call as c
LEFT OUTER JOIN AddressChangeRequest as acr ON c.id = acr.callId
LEFT OUTER JOIN CallNote as cn ON c.id = cn.callId

1 个答案:

答案 0 :(得分:0)

不幸的是,答案是“不”。 L2S的急切加载支持是原始的。但是,您可以在标准查询工具之上创建自己的版本。