Recursos Visual Basic que suportam LINQ
O nome de LINQ (consulta integrada à linguagem) refere-se a nova tecnologia no Visual Basic 2008 que oferece suporte à sintaxe de consulta e Outros nova linguagem construções diretamente na linguagem. Com LINQ, você não precisa aprender uma nova linguagem de consulta em relação a uma fonte de dados externa. Você pode consultar em relação aos dados em bancos de dados relacionais, os armazenamentos XML ou objetos usando o Visual Basic.Essa integração de recursos de consulta na linguagem permite time de compilar verificação de erros de sintaxe e segurança de tipos.Essa integração também garante que você já saiba que a maioria dos quais você precisa saber para gravar consultas sofisticadas e variadas no Visual Basic 2008.
As seções a seguir descrevem as novas construções de linguagem 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 localizar explicações mais detalhadas de como os recursos de idioma são reunidas para ativar a consulta integrada à linguagem.Um mercadoria lugar para começar é Demonstra Passo a passo: Escrever consultas no Visual Basic.
Expressões de consulta
Expressões de consulta em Visual Basic 2008 pode ser expressa em uma sintaxe declarativa semelhante do SQL ou XQuery. No momento da compilar, sintaxe de consulta é convertida em chamadas de método para implementação de um provedor de LINQ de 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 demonstrativo. Sintaxe de uma expressão de consulta do 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 ao LINQ no Visual Basic.
Variáveis implicitamente tipados
Em vez de especificar um tipo explicitamente ao declarar e inicializar uma variável, agora você pode habilitar o compilador a inferir e atribui o tipo, conforme mostrado no exemplo a seguir.Isso é conhecido sistema autônomo inferência de tiposs de tipo de variável local.
Observação: |
---|
inferência de tiposs de tipo de variável local funciona somente quando Você está definindo uma variável local dentro de um corpo de método com Option Infer conjunto para On. On é o padrão para novos projetos em LINQ. Para obter mais informações, consulte Declaração Option Infer. |
' The variable number will be typed as an integer.
Dim aNumber = 5
' The variable name will be typed as a String.
Dim aName = "Virginia"
Observação: |
---|
No Visual Basic 2005 e versões anteriores , compilar esses exemplos, mas o tipo atribuído a ambos aNumber e aName é Object. Portanto, um projeto existente é recompilada em Visual Basic 2008, com Option Infer definido como On, podem comportar-se de maneira diferente do que nas versões anteriores da linguagem. |
' 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
Variáveis declaradas dessa maneira são fortemente tipadas, assim como as variáveis cujo tipo você especificar explicitamente.inferência de tipos de tipos local torna possível criar tipos anônimo, que são necessários para consultas LINQ, mas ele pode ser usado para qualquer variável local.
Para obter mais informações, consulte Inferência de tipos local.
Inicializadores de Objeto
Os inicializadores de objeto são usados em expressões de consulta quando você precisa criar um tipo anônimo para manter os resultados de uma consulta.Eles também podem ser usados para inicializar objetos dos tipos nomeados fora das consultas.Usando um inicializador de objeto, você pode inicializar um objeto em uma única linha sem chamar explicitamente um construtor.Supondo que você tenha uma classe denominada Customer que tem pública Name e Phone Propriedades, junto com outras propriedades, um inicializador de objeto pode ser usado em desta maneira:
Dim aCust As Customer = New Customer With {.Name = "Mike", _
.Phone = "555-0212"}
Para obter mais informações, consulte Inicializadores de objeto: Tipos nomeados e anônimos.
Tipos anônimos
Tipos anônimo fornecem uma maneira conveniente agrupar temporariamente um conjunto de propriedades em um elemento que você deseja incluir em um resultado de consulta.Isso permite que você escolher qualquer combinação de campos disponível na consulta, em qualquer ordem, sem definir um tipo de dados nomeado para o elemento.
An tipo anônimo é criada 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ônimo 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.
Métodos de extensão
Métodos de extensão permitem que você adicione métodos para uma interface de fora da definição ou tipo de dados.Esse recurso permite, na verdade, adicionar novos métodos a um tipo existente sem na verdade, modificar o tipo.Os operadores de consulta padrão propriamente ditas são um conjunto de métodos de extensão que fornecem LINQ funcionalidade de consulta para qualquer tipo que implementa IEnumerable<T>. Outras extensões para IEnumerable<T> incluir Count, Union, e Intersect.
O seguinte método de extensão 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 normal 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 valor único.Ao contrário das funções nomeadas, uma expressão lambda pode ser definida e executada ao mesmo time.O exemplo a seguir exibe 4.
Console.WriteLine((Function(num As Integer) num + 1)(3))
Você pode atribuir a definição de expressão lambda a um nome de variável e use o nome para chamar a função.O exemplo a seguir também exibe 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 sistema autônomo cálculos são definidos em métodos de consulta fundamentais, sistema autônomo 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 de consulta é compilada no código que é semelhante ao seguinte exemplo 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)
Qualquer versão pode ser executada usando 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.
Consulte também
Tarefas
Consultas de exemplo (Visual Basic)
Conceitos
LINQ e seqüências de caracteres