linq中左外连接的产品不保持右侧

时间:2011-09-02 20:38:09

标签: linq

我正在尝试使用linq进行左外连接。我发誓这是几周前我写作和测试时的工作,但现在它实际上并没有加入双方。

var combined = from h in historyTable
join d in (from d in deviceTable where d.DeviceType == 5 select d) on h.SerialNumber equals d.SerialNumber into dh
from subDH in dh.DefaultIfEmpty()
select subDH;

这应该作为左外连接,对吗?我并没有错过一些至关重要的东西,因为所有这一切应该是在SerialNumber上加入每个表。我已经制作了一个SQL版本,它运行得很好。

SELECT *
FROM [deviceTable] AS [t0]
LEFT OUTER JOIN (
    SELECT *
    FROM [historyTable]
    ) AS [t1] ON [t0].[SerialNumber] = [t1].[SerialNumber]
WHERE [t0].[DeviceType] = 5
GO

我做错了什么?

1 个答案:

答案 0 :(得分:0)

看起来你的SQL的左右两侧是相反的。试试这个:

var combined = from d in deviceTable
               where d.DeviceType == 5
               join h in historyTable on d.SerialNumber equals h.SerialNumber
                      into dh
               from subDH in dh.DefaultIfEmpty()
               select new { d, subDH };