【发布时间】:2012-02-12 03:40:04
【问题描述】:
我的 Linq-to-Sql 遇到了障碍。
我有一个按我想要的方式运行的 sql 查询,通常我使用 Linqer 转换为 Linq 以查看总体思路。但是这次我的 SQL 查询似乎对 Linqer 进行了改进。 :/
我认为问题在于嵌套在 LEFT OUTER JOIN 中的 INNER JOINS。不幸的是,我以前从未遇到过这个问题,也不知道如何使用 Linq 解决它。
我的 SQL 查询如下所示:
SELECT c.[Company], c.[Name_First], c.[Name_Last], ort.[IDOriginatorRoleType],
ort.[RoleType] AS [OriginatorRoleType], o.[IDOriginator], o.[IDWork],
o.[IDContact], m.[IDMedia], m.[IDWork], m.[FileName], m.[FileNameOnDisk],
m.[DateAdded], w.[IDWork] AS [IDWork2], w.[ArticleNumber], w.[Title],
w.[FrontPageLow], w.[FrontPageLowOnDisk], w.[FrontPageHigh],
w.[FrontPageHighOnDisk]
FROM [dbo].[tblSubscriptionsWorks] AS sw
INNER JOIN [dbo].[tblWorks] AS w ON sw.[IDWork] = w.[IDWork]
LEFT OUTER JOIN [dbo].[tblMedias] AS m ON m.[IDWork] = w.[IDWork]
LEFT OUTER JOIN ([dbo].[tblOriginators] AS o
INNER JOIN [dbo].[tblOriginatorRoles] AS ors ON
o.[IDOriginatorRole] = ors.[IDOriginatorRole]
INNER JOIN [dbo].[tblOriginatorRoleTypes] AS ort ON
ors.[IDOriginatorRoleType] = ort.[IDOriginatorRoleType]
INNER JOIN [dbo].[tblContacts] AS c ON
o.[IDContact] = c.[IDContact]) ON
(o.[IDWork] = w.[IDWork]) AND (ort.[IDOriginatorRoleType] = 1)
WHERE sw.[IDWork_Subscription] = 9942
【问题讨论】:
-
我认为这些连接是“链式的”而不是“嵌套的”。
-
你看过使用 LinqPad 吗,它可能真的很有用
标签: sql linq sql-server-2008 linq-to-sql .net-4.0