Esta semana realizamos na Microsoft o Innovation Days SP de Março. Este evento é para parceiros que fazem parte do programa de parcerias da Microsoft como desenvolvedores de software (ISV's) ou com desenvolvedores de soluções customizadas (CDS's)*. O tema deste mês foi LINQ.

Eu tive a oportunidade de apresentar o LINQ to SQL (antes DLINQ) que faz o mapeamento objeto relacional de um database em um SQL Server. E os objetos mapeados podem ser acessados por queries do LINQ. As queries do LINQ para SQL permitem que qualquer query que você pode fazer no SQL no banco de dados também sejam feitas.

Os outros palestrantes foram o Joel Pereira e o Roberto Santos, ambos fazem parte do primeiro time de desenvolvimento da Microsoft no Brasil. O Roberto deixou todo mundo de cabelo em pé enquanto mostrava o que acontence no compilador e como implementar algumas coisas em LINQ.

Mas, falando sobre LINQ to SQL pedi para ele mostrar uma das coisas interessantes de uso do LINQ. O LINQ permite que façamos joins entres objetos que representam tabelas. O mais interessante é que o join pode ser feito com entre um objeto que representa uma tabela um array de strings, por exemplo.

Vejo o que pode se feito. Vamos usar o database Northwind. Vamos fazer uma query na tabela customers para trazer todos os identificadores dos clientes com a cidade Londres.

               var _result = from c in db.Customers
                                  where c.City == "LONDON"
                                  select c.CustomerID;

O resultado será:

 

Digamos agora que eu quero buscar apenas um subconjunto deste Id's. Podemos utilizar o array de strings abaixo como base.

                var _ids = new string[] {"AROUT","BSBEV","CONSH"};

Podemos então fazer um join entre os dois objetos.

                var _result =  from id in _ids
                                    from c in db.Customers
                                    where c.CustomerID == id && c.City == "LONDON"
                                    select c.CustomerID;

E teremos como resultado:

Uma outra maneira seria:

               var _result = from id in _ids
                                  join c in db.Customers on id equals c.CustomerID
                                  select c.CustomerID;

Isto é LINQ!!! Não é uma melhor maneira de manipular dados do que ficar mexendo com string para e para lá!?

Até mais!!!

* P.S: O Innovation Days são eventos focados em parceiros desenvolvedores de produtos e soluções. Em São Paulo estes eventos tem como objetivo tratar de um único assunto por mês e fazer um drill-down neste assunto, mostrando a arquitetura e dando dicas e truques. Eventos de nível 300.