繁体   English   中英

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

[英]Selecting multiple one to many relationships in LINQ to SQL using outer joins

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

结构:
表1:电话
表2:AddressChangeRequest
表3:通话记录

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

LINQ代码:
返回db.Calls.Where(c => c.CustomerKey =='...')。Select(c => new Call(c.CustomerKey,c.StartTime,c.AddressChangeRequests,c.CallNotes));

呼叫是一个域对象,需要一个AddressChangeRequests和CallNotes列表。 该代码按预期返回呼叫列表,但是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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM