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 PaoniEste 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
- Representando dados em XML no SQL ServerSQL Server
- Diferenças entre SEQUENCES x IDENTITY no Microsoft SQL Server 2012SQL
- Utilizando FILETABLE no SQL Server 2012SQL Server
- NHibernate com o Delphi Prism: Acessando um Banco de Dados SQL ServerVisual Studio
- Novidades no SQL Server Codinome DenaliSQL Server