我正在尝试使用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
我做错了什么?
答案 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 };