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

Comentários

24/7/2009 00:04:28 #

arnaldo galdino

            var obj = from v in db.Venda_Corpos
                  join p in db.Produtos on v.CodigoBarras equals p.CodigoBarras && v.Confeccao equals confeccao.Codigo
                  into t
                  from ov in t.DefaultIfEmpty()
                  where v.Venda == codigo && v.Confeccao == confeccao.Codigo && ov.CodigoBarras == v.CodigoBarras
                  select new { CodigoBarras = v.CodigoBarras, Confeccao = v.Confeccao, PrecoUnitario = v.PrecoUnitario, Quantidade = v.Quantidade, Preco_Total = (v.Quantidade * v.PrecoUnitario), produto_descricao = ov.Descricao };

arnaldo galdino | Reply

28/8/2009 00:26:40 #

bad credit loans

Hello webmaster I like your post �.

bad credit loans | Reply

23/9/2009 07:49:07 #

payday loan

Nice post! GA is also my biggest earning. However, it�s not a much.

payday loan | Reply

23/9/2009 07:49:12 #

payday loan

There is obviously a lot to know about this.  I think you made some good points in Features also.

payday loan | Reply

18/8/2010 02:53:46 #

vigrx

your site layout is very good

vigrx | Reply

Comentar




biuquote
  • Comentário
  • Pré-visualização
Loading



Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen