Como Utilizar Left Join em Consultas LINQ to SQL

by Fabiano 18. março 2008 21:28

 

Ultimamente tenho recebido nos treinamentos varios alunos tem me perguntado se e possivel fazer LEFT JOIN em consultas LINQ estão resolvi escrever este pequeno artigo com um exemplo de como fazer.  Espero poder abrir um caminho que os levara a consultas LINQ cada vez mais otmizadas e inteligente.

Vamos ao exemplo:

Para isso vou utilizar as tabelas de Customers e de Orders ( Clientes e Pedidos)  no Banco de Dados Northwind, adcionei um novo Cliente sem nenhum pedido, vou criar um SELECT com LEFT JOIN que me retorne todos os clientes que o nome comece com a letra(“F”)  mesmo que eles não tenham registros na tabela de pedido.

NorthwindDataContext db= new NorthwindDataContext();

        var query=  from c in db.Customers

                    where c.CustomerID.StartsWith("F")

                    join o in db.Orders on c.CustomerID equals o.CustomerID into sr

                    from x in sr.DefaultIfEmpty()

                    select new {CustomerID= c.CustomerID, ContactName=c.ContactName, OrderID = x.OrderID == null ? -1 : x.OrderID};   

Veja que eu usei o operador join into na Query o que resultou em um LEFT JOIN, Eu adcionei meu filtro no final da clausula WHERE, e retornei um tipo anonimo que contem  CustomerID, ContactName, e OrderID onde -1 corresponde os clientes que não tem nenhum pedido e os que tem pedido retornamos o ID do pedido.

Veja a string SQL correspondente:

SELECT [t0].[CustomerID], [t0].[ContactName], 

    (CASE 

        WHEN [t1].[OrderID] IS NULL THEN @p1

        ELSE [t1].[OrderID]

     END) AS [value]

FROM [dbo].[Customers] AS [t0]

LEFT JOIN [dbo].[Orders] AS [t1] ON [t0].[CustomerID] = [t1].[CustomerID]

WHERE [t0].[CustomerID] LIKE @p0

Observe como o LEFT JOIN aparece, perceba como o case reflete IF/ELSE que eu adicionei na Query acima.

Bons Códigos...

 

Tags: , ,

.Net

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen