【发布时间】:2010-07-22 15:41:51
【问题描述】:
我正在使用 .NET 4 和 VS 2010,并且在 .NET 3.5/VS 2008 中遇到同样的问题
结构:
表 1:调用
表 2:地址更改请求
表 3:CallNotes
单个呼叫可以有多个 AddressChangeRequest 和多个 CallNotes。一个客户 (customerKey) 可以有许多呼叫。
LINQ 代码:
返回 db.Calls.Where(c => c.CustomerKey == '...').Select(
c => new Call(c.CustomerKey, c.StartTime, c.AddressChangeRequests, c.CallNotes));
Call 是一个需要 AddressChangeRequests 和 CallNotes 列表的域对象。代码按预期返回调用列表,但 SQL 不是最佳的。
上面的代码从 Call 表生成 SQL 作为一个 SELECT,在 AddressChangeRequest 表上有一个左外连接,然后是来自 CallNote 表的单独 SELECT 查询(每个关联的调用一个)
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
【问题讨论】:
-
假设 LINQtoSQL 并且您正在使用 DataLoadOptions.LoadWith?
-
对 LINQtoSQL 是的,是的,我已经尝试在 CallNote 和 AddressChangeRequest 上使用 DataLoadOptions.LoadWith,启用或禁用没有区别。感谢您的评论,还有其他想法吗?
标签: c# .net linq linq-to-sql c#-4.0