Banco de Dados - SQL Server

Introdução ao LINQ

Este artigo tem como objetivo apresentar uma visão geral do funcionamento do LINQ, a sintaxe básica da linguagem e montar um projeto no Visual Studio 2008 utilizando esta tecnologia.

por Rodolfo Paoni



Este artigo tem como objetivo apresentar uma visão geral do funcionamento do LINQ, a sintaxe básica da linguagem e montar um projeto no Visual Studio 2008 utilizando esta tecnologia.

Tecnologias utilizadas:

.NET Framework 3.5;

Microsoft Visual Basic 2008 Express.

LINQ (.NET Language Integrated Query) é um novo mecanismo introduzido no .NET Framework 3.5 que tem como objetivo  unificar o modelo de acesso a dados a diferentes fontes de informação como objetos,  documentos XML, estruturas de dados e bancos de dados. Utilizando LINQ você pode programar o código de acesso a dados diretamente em C# ou VB.NET e verificar  a sintaxe em tempo de compilação. Com o LINQ não há necessidade de se utilizar diferentes tecnologias para acesso a dados como SQL, XPath, XQuery, entre outras, pois  o LINQ utiliza um modelo unificado de acesso a dados.

O LINQ to SQL atualmente funciona apenas com o SQL Server, pois o mesmo utiliza o padrão ANSI, o qual não é adotado por todos os bancos de dados. Existem projetos com a iniciativa de tornar o LINQ compatível com outros bancos de dados, como por exemplo, o DBLinq Project: http://code2code.net/DB_Linq/index.html

O LINQ é dividido em 5 partes: LINQ para objetos, LINQ para conjuntos de dados, LINQ para SQL, LINQ para entidades e LINQ para XML.

Fonte: http://msdn.microsoft.com/msdnmag/issues/07/06/CSharp30/pt/fig01.gif

Ok. Vamos então à prática. Inicialmente apresentarei a sintaxe básica do LINQ. Para isso utilizarei um simples array de inteiros.

Abra o Visual Studio 2008 Express e crie um novo projeto chamado linqToSQL. Você pode colocar outro nome se quiser.

 

Construa uma interface com as seguintes características. Você pode nomear os componentes da forma que quiser.

Inclua uma referência a System.Data.Linq no projeto.

Depois adicione referência à esta biblioteca:

Imports System.Data.Linq

Em seguida declare um array de inteiros:

Dim array() As Integer = {1, 3, 10, -3, 8, 447, 265, 97, 53}

No evento Click do botão ‘Selecionar’ adicione o seguinte código:

    Private Sub btnSelecionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelecionar.Click

        txtResult.Text = String.Empty

        Dim numeros = From numero In array

        For Each numero In numeros

            txtResult.Text += numero.ToString + " "

        Next

    End Sub

A utilização básica é, portanto:

From <var> In Collection Select <OrderBy><Group>

A cláusula From é a mais importante do LINQ. O Motivo de ela vir primeiro é que devemos inicialmente definir a origem dos dados e depois mostrar as listas de membros naquela coleção.

Comparando o SQL com o LINQ teríamos:

SQL: SELECT numero FROM array

LINQ: From numero In array Select numero

OBS: No LINQ, quando precisamos simplesmente recuperar todas as linhas da consulta, podemos omitir o SELECT. Neste caso, o SELECT pode ficar implícito.

Nesta consulta é utilizado um recurso bastante interessante do .NET Framework 3.5, que é a Inferência de tipos (Inference Types). Esta funcionalidade permite ocultarmos a declaração do tipo da variável durante a escrita do código. O tipo da variável é atribuído dinamicamente. Portanto, o tipo da variável numeros está sendo inferido pelo compilador, pois não está declarado no código.

No evento Click do botão ‘ordenar’ adicione o seguinte código:

    Private Sub btnOrdenar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOrdenar.Click

        txtResult.Text = String.Empty

        Dim numeros = From numero In array Order By numero

        For Each numero In numeros

            txtResult.Text += numero.ToString + " "

        Next

    End Sub

Poderíamos também ter utilizado a seguinte cláusula:

From numero In array Select numero Order By numero

Neste caso o SELECT pode ficar implícito, novamente.

A sintaxe do LINQ é extensa e possui uma série de operadores. Apresentarei rapidamente os operadores TAKE e SKIP.

Neste caso desejo retornar apenas os 3 primeiros registros. Modifique a consulta no evento Click do botão ‘Selecionar’ para:

Dim numeros = From numero In array.Take(3)

E no botão ordenar, desejo retornar apenas os 5 primeiros, ordenadamente:

Dim numeros = From numero In array.Take(5) Order By numero

Novamente no botão ordenar, desejo retornar apenas 3 registros, a partir do 3º e ordenadamente:

Dim numeros = From numero In array.Skip(2) Take (3) Order By numero

O mesmo resultado poderia ter sido obtido assim:

Dim numeros = From numero In array.Take(5) Skip (2) Order By numero

Aguarde a continuação do artigo, onde apresentarei como utilizar o LINQ to SQL e fazer consultas, inclusões, atualizações e exclusões utilizando esta ferramenta. Em outros artigos abordarei o LINQ to DataSet, LINQ to XML, assim como utilizar Stored Procedures com LINQ.

Até mais!

Referências:

http://www.microsoft.com/brasil/msdn/Tecnologias/arquitetura/LINQ.mspx

http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx

http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

Rodolfo Paoni

Rodolfo Paoni - Rodolfo Paoni - Desenvolvedor .NET - Twitter: @rodolfopaoni