我试图将SQL query
转换为Linq
包含几个左外部联接,但我遇到了一个奇怪的情况。SQL到Linq查询与多个左外部联接
我的SQL的相关部分是:
SELECT * FROM dbo.SessionDetails as sd
left outer join dbo.VoipDetails as vd on vd.SessionIdTime = sd.SessionIdTime and vd.SessionIdSeq = sd.SessionIdSeq
left outer join dbo.Gateways as fgw on vd.FromGatewayId = fgw.GatewayId
我Linq查询到目前为止是:
var query = from sd in dbo.SessionDetails
join vd in dbo.VoipDetails on new { sd.SessionIdTime, sd.SessionIdSeq } equals new { vd.SessionIdTime, vd.SessionIdSeq } into sdvd
from v in sdvd.DefaultIfEmpty()
join fgw in dbo.Gateways on vd.FromGatewayId equals fgw.GatewayId into sdgw
from g in sdvd.DefaultIfEmpty()
select sd;
我得到一个错误标记上vd.FromGatewayId
告诉我,The name 'vd' is not in scope on the left side of 'equals'. Consider swapping the expressions on either side of 'equals'.
然而,如果我与gw.GatewayId
交换双方,那么我得到相同的错误消息vd
和gw
。 有人可以在这里建议正确的语法吗? 请记住,我有几个左连接添加后,我得到的基本语法。
我很可能会误解,但为了继续做左外连接,不应该将'v.FromGatewayId'等于fgw.GatewayId'从sdgw.DefaultIfEmpty()'中的g放入sdgw中,而不是'再次使用sdvd.DefaultIfEmpty()? – Black 2014-12-07 23:15:06