Recursos do Visual Basic que suportam LINQ
O nome LINQ (Consulta Integrada à Linguagem) refere-se a tecnologia em Visual Basic, que oferece suporte à sintaxe de consulta e construções de outra linguagem diretamente na linguagem. Com LINQ, você não precisa aprender uma nova linguagem de consulta em relação uma fonte de dados externa. É possível consultar dados em bancos de dados relacionais, armazenamentos XML ou objetos usando o Visual Basic. Essa integração dos recursos de consulta para o idioma permite a verificação de tempo de compilação para erros de sintaxe e a segurança de tipos. Essa integração também garante que você já saiba que a maioria dos quais você precisa saber para escrever consultas ricos e variadas em Visual Basic.
As seções a seguir descrevem as construções de linguagem que oferecem suporte a LINQ em detalhes suficientes para que você possa começar a ler a documentação introdutória, exemplos de código e aplicativos de exemplo. Você também pode clicar nos links para obter explicações mais detalhadas sobre como os recursos de idioma se reúnem para habilitar a consulta integrada à linguagem. Um bom lugar para começar é Instruções passo a passo: escrevendo consultas em Visual Basic.
Expressões de consulta
As expressões de consulta de Visual Basic podem ser expressa na sintaxe declarativa semelhante do SQL ou XQuery. Em tempo de compilação, a sintaxe de consulta é convertida em chamadas de método para a implementação de um provedor LINQ dos métodos de extensão de operador de consulta padrão. Controle de aplicativos que operadores de consulta padrão estão no escopo, especificando o namespace apropriado com um Imports instrução. Sintaxe de uma expressão de consulta Visual Basic tem esta aparência:
Dim londonCusts = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust.Name, cust.Phone
Para obter mais informações, consulte Introdução a LINQ no Visual Basic.
Variáveis digitadas implicitamente
Em vez de especificar explicitamente um tipo ao declarar e inicializar uma variável, você pode habilitar o compilador inferir e atribuir o tipo. Isso é conhecido como inferência de tipo local.
Variáveis cujos tipos são inferidos são fortemente tipadas, como as variáveis cujo tipo você especificar explicitamente. Inferência de tipo local só funciona quando você está definindo uma variável local dentro de um corpo de método. Para obter mais informações, consulte Instrução Option Infer e Inferência de tipo local (Visual Basic).
O exemplo a seguir ilustra a inferência de tipo local. Para usar esse exemplo, você deve definir Option Infer para On.
' The variable aNumber will be typed as an integer.
Dim aNumber = 5
' The variable aName will be typed as a String.
Dim aName = "Virginia"
Inferência de tipo local torna possível criar tipos anônimos, que são descritos mais adiante nesta seção e são necessários para consultas LINQ.
No exemplo a seguir LINQ, a inferência de tipo ocorre se Option Infer é On ou Off. Ocorrerá um erro de tempo de compilação se Option Infer é Off e Option Strict é On.
' Query example.
' If numbers is a one-dimensional array of integers, num will be typed
' as an integer and numQuery will be typed as IEnumerable(Of Integer)--
' basically a collection of integers.
Dim numQuery = From num In numbers
Where num Mod 2 = 0
Select num
Inicializadores de Objeto
Inicializadores de objeto são usados em expressões de consulta quando você tem que criar um tipo anônimo para manter os resultados de uma consulta. Eles também podem ser usados para inicializar objetos de tipos nomeados fora das consultas. Usando um inicializador de objeto, você pode inicializar um objeto em uma única linha sem explicitamente chamar um construtor. Supondo que você tenha uma classe chamada Customer que tem públicas Name e Phone propriedades, junto com outras propriedades, pode ser usado um inicializador de objeto desta maneira:
Dim aCust = New Customer With {.Name = "Mike",
.Phone = "555-0212"}
Para obter mais informações, consulte Inicializadores de objeto: tipos nomeados e anônimos (Visual Basic).
Tipos Anônimos
Tipos anônimos fornecem uma maneira conveniente temporariamente agrupar um conjunto de propriedades em um elemento que você deseja incluir no resultado de uma consulta. Isso permite que você escolher qualquer combinação de campos disponíveis na consulta, em qualquer ordem, sem definir um tipo de dados nomeado para o elemento.
Um tipo anônimo foi construído dinamicamente pelo compilador. O nome do tipo é atribuído pelo compilador, e pode alterar com cada nova compilação. Portanto, o nome não pode ser usado diretamente. Tipos anônimos são inicializados da seguinte maneira:
' Outside a query.
Dim product = New With {.Name = "paperclips", .Price = 1.29}
' Inside a query.
' You can use the existing member names of the selected fields, as was
' shown previously in the Query Expressions section of this topic.
Dim londonCusts1 = From cust In customers
Where cust.City = "London"
Select cust.Name, cust.Phone
' Or you can specify new names for the selected fields.
Dim londonCusts2 = From cust In customers
Where cust.City = "London"
Select CustomerName = cust.Name,
CustomerPhone = cust.Phone
Para obter mais informações, consulte Tipos anônimos (Visual Basic).
Métodos de extensão
Métodos de extensão permitem que você adicione métodos para um tipo de dados ou a interface de fora da definição. Este recurso permite que você, na verdade, adicionar novos métodos para um tipo existente sem realmente modificar o tipo. Os operadores de consulta padrão são um conjunto de métodos de extensão que fornecem LINQ para qualquer tipo que implementa a funcionalidade de consulta IEnumerable. Other extensions to IEnumerable include Count, Union, and Intersect.
O método de extensão a seguir adiciona um método de impressão para o String classe.
' Import System.Runtime.CompilerServices to use the Extension attribute.
<Extension()>
Public Sub Print(ByVal str As String)
Console.WriteLine(str)
End Sub
O método é chamado como um método de instância comum de String:
Dim greeting As String = "Hello"
greeting.Print()
Para obter mais informações, consulte Métodos de extensão (Visual Basic).
Expressões Lambda
Uma expressão lambda é uma função sem um nome que calcula e retorna um único valor. Ao contrário das funções nomeadas, uma expressão lambda pode ser definida e ser executada ao mesmo tempo. O exemplo a seguir exibe a 4.
Console.WriteLine((Function(num As Integer) num + 1)(3))
Você pode atribuir a definição da expressão lambda para um nome de variável e, em seguida, use o nome para chamar a função. O exemplo a seguir exibe também 4.
Dim add1 = Function(num As Integer) num + 1
Console.WriteLine(add1(3))
Em LINQ, expressões lambda são a base de muitos dos operadores de consulta padrão. O compilador cria expressões lambda para capturar os cálculos que são definidos nos métodos de consulta fundamentais, como Where, Select, Order By, Take Whilee outros.
Por exemplo, o código a seguir define uma consulta que retorna todos os alunos sênior de uma lista dos alunos.
Dim seniorsQuery = From stdnt In students
Where stdnt.Year = "Senior"
Select stdnt
A definição da consulta é compilada no código que é semelhante ao exemplo a seguir, que usa duas expressões lambda para especificar os argumentos para Where e Select.
Dim seniorsQuery2 = students.
Where(Function(st) st.Year = "Senior").
Select(Function(s) s)
Tanto a versão pode ser executada por meio de um For Each loop:
For Each senior In seniorsQuery
Console.WriteLine(senior.Last & ", " & senior.First)
Next
Para obter mais informações, consulte Expressões lambda (Visual Basic).
Consulte também
Referência
Conceitos
LINQ e seqüências de caracteres
Recursos do C# que dão suporte a LINQ