Я пытаюсь преобразовать 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
. Может кто-нибудь предложить правильный синтаксис здесь? Пожалуйста, имейте в виду, что у меня есть еще несколько левых соединений, которые нужно добавить после того, как я получу базовый синтаксис.
Я мог бы быть недопониманием, но для продолжения создания left-external-join, не должно быть 'on v.FromGatewayId равно fgw.GatewayId в sdgw из g в sdgw.DefaultIfEmpty()', а не ' sdvd.DefaultIfEmpty() 'снова? – Black