Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用外部联接在LINQ到SQL中选择多个一对多关系_C#_.net_Linq_Linq To Sql_C# 4.0 - Fatal编程技术网

C# 使用外部联接在LINQ到SQL中选择多个一对多关系

C# 使用外部联接在LINQ到SQL中选择多个一对多关系,c#,.net,linq,linq-to-sql,c#-4.0,C#,.net,Linq,Linq To Sql,C# 4.0,我使用的是.NET4和VS2010,在.NET3.5/VS2008中也有同样的问题 结构: 表1:呼叫 表2:AddressChangeRequest 表3:调用注释 一个调用可以有多个AddressChangeRequests和多个CallNotes。一个客户(customerKey)可以有很多电话 LINQ代码: 返回db.Calls.Where(c=>c.CustomerKey=''…')。选择( c=>newcall(c.CustomerKey,c.StartTime,c.Address

我使用的是.NET4和VS2010,在.NET3.5/VS2008中也有同样的问题

结构:
表1:呼叫
表2:AddressChangeRequest
表3:调用注释

一个调用可以有多个AddressChangeRequests和多个CallNotes。一个客户(customerKey)可以有很多电话

LINQ代码:
返回db.Calls.Where(c=>c.CustomerKey=''…')。选择( c=>newcall(c.CustomerKey,c.StartTime,c.AddressChangeRequests,c.CallNotes))

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

上面的代码从Call表中生成SQL作为one-SELECT,AddressChangeRequest表上有一个左外部联接,后面是CallNote表中的单独SELECT查询(每个关联调用一个)

如果我从代码中删除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

不幸的是,答案是“不”。L2S的快速加载支持非常原始。但是,您可以在标准查询功能的基础上创建自己的版本。

假设LINQtoSQL和您使用的是DataLoadOptions.LoadWith?对LINQtoSQL是,我已经尝试过DataLoadOptions.LoadWith,在CallNote和AddressChangeRequest上启用或禁用都没有什么区别。谢谢你的评论,还有其他想法吗?
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