LINQ LAMBDA COM LEFT JOIN
olá amigos,
preciso fazer a junção de dois list com linq/lambda com left join a lista de clientes deve ser exibida inteira.
porem o meu join esta com comportameneto de innerjoin, trazendo só oque tem correspondente.
como falo um LEFT JOIN em linq?
a esquerda na imagem, um comparativo em MYSQL com left join, repare que nos clientes que NÂO tem ligação
preciso fazer a junção de dois list com linq/lambda com left join a lista de clientes deve ser exibida inteira.
porem o meu join esta com comportameneto de innerjoin, trazendo só oque tem correspondente.
como falo um LEFT JOIN em linq?
a esquerda na imagem, um comparativo em MYSQL com left join, repare que nos clientes que NÂO tem ligação
Opa, boa noite.
O síntaxe para obter o resultado do left join não é tão natural quanto o Inner Join. Basicamente voce cria um Group Join e realiza o DefaultIfEmpty no resultado desse agrupamento, garantindo assim que sempre retornará um valor padrão para a junção no caso de não existir correlação. Meio confuso né? Fiz um exemplo que deve ajudar.
O síntaxe para obter o resultado do left join não é tão natural quanto o Inner Join. Basicamente voce cria um Group Join e realiza o DefaultIfEmpty no resultado desse agrupamento, garantindo assim que sempre retornará um valor padrão para a junção no caso de não existir correlação. Meio confuso né? Fiz um exemplo que deve ajudar.
Module Program
Public Class Cliente
Public Property Id As Integer
Public Property Nome As String
Public Sub New(id As Integer, nome As String)
Me.Id = id
Me.Nome = nome
End Sub
End Class
Public Class Ligacao
Public Property ClienteId As Integer
Public Property DataHora As DateTime
Public Sub New(clientId As Integer)
Me.ClienteId = clientId
Me.DataHora = DateTime.Now
End Sub
End Class
Private ReadOnly _clientes As List(Of Cliente) = New List(Of Cliente)(
{
New Cliente(1, "José"),
New Cliente(2, "João")
})
Private ReadOnly _ligacoes As List(Of Ligacao) = New List(Of Ligacao)(
{
New Ligacao(1),
New Ligacao(1)
})
Sub Main(args As String())
Dim linq1 = From c In _clientes
Group Join l In _ligacoes On c.Id Equals l.ClienteId Into Group
From l In Group.DefaultIfEmpty()
Select New With {
.NomeCliente = c.Nome,
.DataHoraLigacao = l?.DataHora
}
For Each p In linq1
Console.WriteLine(p.NomeCliente & " | " & p.DataHoraLigacao)
Next
End Sub
End Module
obrigado DS2T, funcionou perfeitamente. valeu
obrigado
Tópico encerrado , respostas não são mais permitidas