LEFT JOIN NO ENTITY FRAMEWORK

FERRUBIM 12/10/2016 09:56:33
#468014
alguem pode me dizer como fazer o comando do left join no entity frameowrk pois a tabela ctxsisa.TB_TITULO pode ou nao existir ... como coloco essa linha no comando ??? left Join parcela In ctxsisa.TB_TITULO On parcela.CD_CLIENTE Equals pessoa.CD_CLIENTE



Try
Using ctxsisa = New SISAEntities()
Dim resultado = From pessoa In ctxsisa.TB_PESSOA
Join contrato In ctxsisa.TB_CONTRATO On contrato.CD_CLIENTE Equals pessoa.CD_CLIENTE
Join banco In ctxsisa.TB_BANCO On banco.ID_BANCO Equals contrato.ID_BANCO
left Join parcela In ctxsisa.TB_TITULO On parcela.CD_CLIENTE Equals pessoa.CD_CLIENTE
Where contrato.FL_EXCLUIDO = 0 And
contrato.ID_BANCO = wlIdBanco And
contrato.ID_CONTRATO = parcela.ID_CONTRATO And
parcela.DT_RECEBIMENTO Is Nothing
Order By pessoa.NM_PESSOA
Select pessoa.CD_CLIENTE, pessoa.NM_PESSOA, contrato.CD_CONTRATO, pessoa.DT_INCLUSAO,
pessoa.IN_F_J, contrato.IN_TIPO_COBRANCA, contrato.VL_SALDO_DEVEDOR, pessoa.CD_UF,
parcela.DT_VCTO, parcela.NR_DIAS_ATRASO, parcela.VL_TITULO

If resultado.Count = 0 Then
MessageBox.Show([Ô]Sem seleção de clientes para a Campanha desejada ...[Ô], [Ô]ok[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
For Each par In resultado.ToList
wlCdCliente = par.CD_CLIENTE
Try
Dim _campanha As New TB_CAMPANHA
_campanha.ID_CAMPANHA = wgidCampanha
_campanha.ID_CLIENTE = wlCdCliente
_campanha.NR_PRIORIDADE_CAMPANHA = wlPrioridadeCampanha
_campanha.NR_PRIORIDADE_CLIENTE = 0
_campanha.DT_INCLUSAO = DateTime.Now.ToString([Ô]yyyy/MM/dd[Ô])
_campanha.AN_USUARIO_INCLUSAO = wgCdUsuario
[ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô][ô]
Using ctxsisa2 = New SISAEntities()
ctxsisa2.TB_CAMPANHA.Add(_campanha)
ctxsisa2.SaveChanges()
End Using
Catch ex As Exception
MessageBox.Show(ex.Message, [Ô]Erro[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Next

End Using
Catch ex As Exception
MessageBox.Show(ex.Message() & [Ô] - [Ô] & ex.InnerException.ToString, [Ô]Erro[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End Try
DS2T 13/10/2016 08:40:12
#468034
Resposta escolhida
Não existe Left Join propriamente dito no Entity Framework, o que pra mim, deixaria o código muito melhor de entender.
Você pode usar um Group, assim: (Fiz direto aqui, pode ter algum errinho rs, mas a ideia é essa)

Group Join parcela In ctxsisa.TB_TITULO On pessoa.CD_CLIENTE Equals parcela.CD_CLIENTE Into Group From parcela In Group.DefaultIfEmpty()
FERRUBIM 17/10/2016 16:46:05
#468147
ds2t,, funcionou beleza o comando....porem tenho que testar outras tabelas que podem ou não existir , como faço para incluir mais um [Ô]Into Group[Ô] ... coloquei para a tabela TB_EVENTO mas dá erro aqui Into Group From evento In Group.DefaultIfEmpty() dizendo que o Group já esta declarado...

Using ctxsisa = New SISAEntities()
Dim resultado = From pessoa In ctxsisa.TB_PESSOA
Join contrato In ctxsisa.TB_CONTRATO On contrato.CD_CLIENTE Equals pessoa.CD_CLIENTE
Join banco In ctxsisa.TB_BANCO On banco.ID_BANCO Equals contrato.ID_BANCO
Group Join parcela In ctxsisa.TB_TITULO On pessoa.CD_CLIENTE Equals parcela.CD_CLIENTE Into Group From parcela In Group.DefaultIfEmpty()
Group Join evento In ctxsisa.TB_EVENTO On pessoa.CD_CLIENTE Equals evento.CD_CLIENTE Into Group From evento In Group.DefaultIfEmpty()
Where contrato.FL_EXCLUIDO = 0 And
contrato.ID_BANCO = wlIdBanco And
contrato.ID_CONTRATO = parcela.ID_CONTRATO And
parcela.DT_RECEBIMENTO Is Nothing
Order By pessoa.NM_PESSOA
Select pessoa.CD_CLIENTE, pessoa.NM_PESSOA, contrato.CD_CONTRATO, pessoa.DT_INCLUSAO,
pessoa.IN_F_J, contrato.IN_TIPO_COBRANCA, contrato.VL_SALDO_DEVEDOR, pessoa.CD_UF,
parcela.DT_VCTO, parcela.NR_DIAS_ATRASO, parcela.VL_TITULO
Tópico encerrado , respostas não são mais permitidas