我正在使用.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
答案 0 :(得分:0)
不幸的是,答案是“不”。 L2S的急切加载支持是原始的。但是,您可以在标准查询工具之上创建自己的版本。