[英]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.