Introdução ao LINQ em Visual Basic
Consultas Integradas à Linguagem (LINQ) adiciona recursos de consulta para ovVisual Basic e fornece recursos simples e eficientes quando você trabalha com todos os tipos de dados.Em vez enviar uma consulta para um banco de dados para ser processada, ou trabalhar com diferentes sintaxes de consulta para cada tipo de dados que você está procurando, LINQ apresenta consultas como parte da linguagem Visual Basic.Ela usa uma sintaxe unificada independentemente do tipo de dados.
LINQ permite consultar dados de um banco de dados SQL Server, XML, matrizes de memória e coleções, conjuntos de dados ADO.NET ou qualquer outro local ou remoto fonte de dados que ofereça suporte ao LINQ.Você pode fazer tudo isso com elementos de linguagem Visual Basic comuns.Como as consultas são gravadas na linguagem Visual Basic,resultados da consulta são retornados como objetos de alta segurança digitada.Esses objetos oferecem suporte IntelliSense, que permite que você escrever código mais rápido e detectar erros nas consultas no tempo de compilação em vez de em tempo de execução.Consultas LINQ podem ser usadas como a fonte de consultas adicionais para refinar os resultados.Elas também podem ser associadas a controles, assim os usuários podem facilmente exibir e modificar os resultados de consulta.
Por exemplo, o exemplo de código a seguir mostra uma consulta LINQ que retorna uma lista de clientes de uma coleção e os agrupa com base em sua localização.
' Obtain a list of customers.
Dim customers As List(Of Customer) = GetCustomers()
' Return customers that are grouped based on country.
Dim countries = From cust In customers
Order By cust.Country, cust.City
Group By CountryName = cust.Country
Into CustomersInCountry = Group, Count()
Order By CountryName
' Output the results.
For Each country In countries
Debug.WriteLine(country.CountryName & " count=" & country.Count)
For Each customer In country.CustomersInCountry
Debug.WriteLine(" " & customer.CompanyName & " " & customer.City)
Next
Next
' Output:
' Canada count=2
' Contoso, Ltd Halifax
' Fabrikam, Inc. Vancouver
' United States count=1
' Margie's Travel Redmond
Neste tópico, você encontrará informações sobre as seguintes áreas:
Executando os exemplos
Provedores LINQ
Estrutura de uma consulta LINQ
Operadores de consulta LINQ Visual Basic
Conectando-se a um banco de dados usando LINQ to SQL
Recursos Visual Basic que suportam LINQ
Execução de consultas adiadas e imediatas
XML no Visual Basic
Recursos relacionados
Tópicos Como Fazer e Passo a Passo
Executando os exemplos
Para rodar os exemplos na introdução e a estrutura “na seção de uma consulta LINQ”, inclui o código a seguir, que retorna uma lista de clientes e de pedidos.
' Return a list of customers.
Private Function GetCustomers() As List(Of Customer)
Return New List(Of Customer) From
{
New Customer With {.CustomerID = 1, .CompanyName = "Contoso, Ltd", .City = "Halifax", .Country = "Canada"},
New Customer With {.CustomerID = 2, .CompanyName = "Margie's Travel", .City = "Redmond", .Country = "United States"},
New Customer With {.CustomerID = 3, .CompanyName = "Fabrikam, Inc.", .City = "Vancouver", .Country = "Canada"}
}
End Function
' Return a list of orders.
Private Function GetOrders() As List(Of Order)
Return New List(Of Order) From
{
New Order With {.CustomerID = 1, .Amount = "200.00"},
New Order With {.CustomerID = 3, .Amount = "600.00"},
New Order With {.CustomerID = 1, .Amount = "300.00"},
New Order With {.CustomerID = 2, .Amount = "100.00"},
New Order With {.CustomerID = 3, .Amount = "800.00"}
}
End Function
' Customer Class.
Private Class Customer
Public Property CustomerID As Integer
Public Property CompanyName As String
Public Property City As String
Public Property Country As String
End Class
' Order Class.
Private Class Order
Public Property CustomerID As Integer
Public Property Amount As Decimal
End Class
Provedores LINQ
Um provedor LINQ mapeia as consultas Visual Basic LINQ para a fonte de dados que está sendo consultada.Quando você escreve um consulta LINQ, o provedor leva essa consulta e converte em comandos que a fonte de dados poderá executar.O provedor também converte dados da fonte para os objetos que compõem o resultado da consulta.Finalmente, ele converte objetos em dados quando você envia atualizações para a fonte de dados.
Visual Basic inclui os seguintes provedores LINQ.
Provider |
Descrição |
LINQ para Objects |
O provedor LINQ to Objects permite que você consulte coleções e matrizes na memória.Se um objeto oferecer suporte à IEnumerable ou interface IEnumerable<T>, o provedor LINQ to Objects permite a você consultá-lo. Você pode ativar o provedor LINQ to Objects importando o namespace System.Linq , que é importado, por padrão, para todos os projetos Visual Basic. Para obter mais informações sobre o provedor LINQ to Objects, consulte LINQ to Objects. |
LINQ para SQL |
O provedor LINQ to SQL permite consultar e modificar dados em um banco de dados SQL Server.Isso facilita mapear a modelo de objeto de um aplicativo para as tabelas e objetos em um banco de dados. Visual Basic facilita a trabalhar com LINQ to SQL, incluindo um Object Relational Designer (O/R Designer).Este criador é usado para criar um modelo de objeto em um aplicativo que mapeia para objetos em um banco de dados. O criador O/R também fornece funcionalidade para mapear os procedimentos armazenados e funções para o objeto DataContext,que gerencia a comunicação com o banco de dados e armazena o estado para concorrência otimista verificações. Para obter mais informações sobre o provedor LINQ to Objects, consulte LINQ to SQL.Para obter mais informações sobre o Object Relational Designer, consulte Object Relational Designer (O/R Designer). |
LINQ para XML |
O provedor LINQ to XML permite consultar e modificar XML.Você pode modificar XML em memória, ou você pode carregar XML de e salvar XML para um arquivo. Além disso, o provedor LINQ to XML permite literais XML e propriedades de eixo XML que permitem escrever XML diretamente em seu código Visual Basic.Para obter mais informações, consulte XML no Visual Basic. |
LINQ para DataSet |
O provedor LINQ to DataSet permite consultar e atualizar dados em um DataSet ADO.NET .Você pode adicionar o poder do LINQ para aplicativos que usam conjuntos de dados para simplificar e estender seus recursos para consultar, agregar e atualizar os dados no seu conjunto de dados. Para obter mais informações, consulte LINQ to DataSet. |
Estrutura de uma consulta LINQ
Um consulta LINQ, geralmente conhecida como uma expressão de consulta,consiste uma combinação de cláusulas de consulta que identificam as fontes de dados e variáveis de iteração para a consulta.Uma expressão de consulta também pode incluir instruções para classificação, filtragem, agrupamento e associação ou cálculos para aplicar a dados de origem.A sintaxe de expressões de consulta é semelhante a sintaxe do SQL; portanto, você pode achar grande parte da sintaxe familiar.
Uma expressão de consulta começa com uma cláusula From.Essa cláusula identifica o dados de origem para uma consulta e as variáveis que são usadas para se referir a cada elemento do dados de origem individualmente.Essas variáveis são denominadas variáveis de intervalo ou variáveis de iteração .A cláusula From é necessária para uma consulta, exceto para consultas Aggregate , onde a cláusula From é opcional.Depois que o escopo e a fonte da consulta são identificados na cláusulas From ou Aggregate, você pode incluir qualquer combinação de cláusulas de consulta para refinar a consulta.Para obter detalhes sobre cláusulas de consulta, consulte operadores de consulta LINQ Visual Basic, ainda nesse tópico.Por exemplo, a consulta a seguir identifica um conjunto de dados do cliente como a variável customers e uma variável de iteração chamada cust.
Dim customers = GetCustomers()
Dim queryResults = From cust In customers
For Each result In queryResults
Debug.WriteLine(result.CompanyName & " " & result.Country)
Next
' Output:
' Contoso, Ltd Canada
' Margie's Travel United States
' Fabrikam, Inc. Canada
Esse exemplo é uma consulta válida por si só; no entanto, a consulta passará a ser muito mais poderosa quando você adicionar mais cláusulas de consulta para refinar os resultados.Por exemplo, você pode adicionar uma cláusula Where para filtrar o resultado por um ou mais valores.Expressões de consulta são uma única linha de código; você apenas pode acrescentar cláusulas de consulta adicionais ao final da consulta.Você pode dividir uma consulta ao longo de várias linhas de texto para aumentar legibilidade usando o caractere de continuação de linha sublinhado (_).O exemplo de código a seguir mostra um exemplo de uma consulta que inclue uma cláusula Where.
Dim queryResults = From cust In customers
Where cust.Country = "Canada"
Outra cláusula de consulta poderosa é a cláusula Select, que permite retornar somente os campos selecionados a partir de fonte de dados.Consultas LINQ retornam coleções enumeráveis de objetos fortemente tipados.Uma consulta pode retornar uma coleção de tipos anônimos ou tipos nomeados.Você pode usar a cláusula Select para retornar apenas um único campo a partir de fonte de dados.Quando você fizer isso, o tipo de coleção retornada é o tipo daquele campo único.Você também pode usar a cláusula Select para retornar vários campos a partir de fonte de dados.Quando você fizer isso, o tipo de coleção retornada é um novo tipo anônimo.Você pode também fazer a correspondência entre os campos retornados pela consulta para os campos de um tipo nomeado especificado.O exemplo de código a seguir mostra uma expressão de consulta que retorna uma coleção de tipos anônimos que possuem membros preenchidos com dados dos campos selecionados a partir de fonte de dados.
Dim queryResults = From cust In customers
Where cust.Country = "Canada"
Select cust.CompanyName, cust.Country
Consultas LINQ também podem ser usadas para combinar várias fontes de dados e retornar um único resultado.Isso pode ser feito com um ou mais cláusulas From, ou usando as cláusulas de consulta Join ou Group Join.O exemplo de código a seguir mostra uma expressão de consulta que combina dados de cliente e pedido e retorna uma coleção de tipos anônimas contendo dados do cliente e de pedidos.
Dim customers = GetCustomers()
Dim orders = GetOrders()
Dim queryResults = From cust In customers, ord In orders
Where cust.CustomerID = ord.CustomerID
Select cust, ord
For Each result In queryResults
Debug.WriteLine(result.ord.Amount & " " & result.ord.CustomerID & " " & result.cust.CompanyName)
Next
' Output:
' 200.00 1 Contoso, Ltd
' 300.00 1 Contoso, Ltd
' 100.00 2 Margie's Travel
' 600.00 3 Fabrikam, Inc.
' 800.00 3 Fabrikam, Inc.
Você pode usar a cláusula Group Join para criar um resultado de consulta hierárquico que contém uma coleção de objetos do cliente.Cada objeto do cliente tem uma propriedade que contém uma coleção de todos os pedidos daquele cliente.O exemplo de código a seguir mostra uma expressão de consulta que combina dados de cliente e de pedido e retorna uma coleção de tipos anônimas contendo dados do cliente e de pedidos.A consulta retorna um tipo que inclue uma propriedade CustomerOrders que contém uma coleção de dados de pedidos para o cliente.Ele também inclui uma propriedade OrderTotal que contém a soma dos totais para todos os de pedidos daquele cliente.(Esta consulta é equivalente a uma LEFT OUTER JOIN.)
Dim customers = GetCustomers()
Dim orders = GetOrders()
Dim queryResults = From cust In customers
Group Join ord In orders On
cust.CustomerID Equals ord.CustomerID
Into CustomerOrders = Group,
OrderTotal = Sum(ord.Amount)
Select cust.CompanyName, cust.CustomerID,
CustomerOrders, OrderTotal
For Each result In queryResults
Debug.WriteLine(result.OrderTotal & " " & result.CustomerID & " " & result.CompanyName)
For Each ordResult In result.CustomerOrders
Debug.WriteLine(" " & ordResult.Amount)
Next
Next
' Output:
' 500.00 1 Contoso, Ltd
' 200.00
' 300.00
' 100.00 2 Margie's Travel
' 100.00
' 1400.00 3 Fabrikam, Inc.
' 600.00
' 800.00
Há vários outros operadores de consulta LINQ que você pode usar para criar expressões de consulta eficiente.A próxima seção deste tópico discute as várias cláusulas de consulta que você pode incluir em uma expressão de consulta.Para obter detalhes sobre como cláusulas de consulta Visual Basic , consulte Consultas (Visual Basic).
Operadores de consulta LINQ Visual Basic
As classes no namespace de System.Linq e outros namespaces que suportam consultas LINQ incluem métodos que você pode chamar para criar e refinar consultas com base nas necessidades do seu aplicativo.Visual Basic inclui palavras-chave para a maioria das cláusulas de consulta comuns, como descrito pela tabela a seguir.
Termo |
Definição |
Ou uma cláusula From ou uma cláusula Aggregate é necessária para iniciar uma consulta.Uma cláusula From especifica uma coleção de fonte e uma variável de iteração para uma consulta.Por exemplo: |
|
Opcional.Declara um conjunto de variáveis de iteração para uma consulta.Por exemplo:
Se uma cláusula Select não for especificada, as variáveis de iteração para a consulta consistem as variáveis de iteração especificadas por From ou cláusula Aggregate . |
|
Opcional.Especifica a condição de filtragem para uma consulta.Por exemplo: |
|
Opcional.Especifica a ordem de classificação das colunas em uma consulta.Por exemplo: |
|
Opcional.Combina duas coleções numa única.Por exemplo:
|
|
Opcional.Agrupa os elementos de um resultado de consulta.Pode ser usado para aplicar funções agregadas a cada grupo.Por exemplo: |
|
Opcional.Combina duas coleções numa única coleção hierarquizada.Por exemplo:
|
|
Ou uma cláusula From ou uma cláusula Aggregate é necessária para iniciar uma consulta.Uma cláusula Aggregate aplica uma ou mais funções agregadas a uma coleção.Por exemplo, você pode usar a cláusula Aggregate para calcular uma soma de todos os elementos retornados por uma consulta.
Você também pode usar a cláusula Aggregate para modificar uma consulta.Por exemplo, você pode usar a cláusula Aggregate para executar um cálculo em uma coleção relacionada de consulta. |
|
Opcional.Calcula um valor e a atribui a uma nova variável na consulta.Por exemplo: |
|
Opcional.Restringe os valores da variável de iteração atual para eliminar valores duplicados nos resultados da consulta.Por exemplo: |
|
Opcional.Ignora um número especificado de elementos em uma coleção e, em seguida, retorna os elementos restantes.Por exemplo: |
|
Opcional.Ignora elementos numa coleção enquanto a condição especificada é true e então retorna os elementos restantes.Por exemplo: |
|
Opcional.Retorna um número especificado de elementos contíguos do início de uma coleção.Por exemplo: |
|
Opcional.Ignora elementos numa coleção desde que uma condição especificada seja true e então retorna os elementos restantes.Por exemplo: |
Para obter detalhes sobre como cláusulas de consulta Visual Basic , consulte Consultas (Visual Basic).
Você pode usar recursos adicionais de consulta LINQ chamando membros dos tipos enumeráveis e consultáveis fornecidos pelo LINQ.Você pode usar esses recursos adicionais, chamando um operador de consulta específica no resultado de uma expressão de consulta.Por exemplo, o exemplo de código a seguir usa o método Union para combinar os resultados das duas consultas em um resultado da consulta.Ele usa o método ToList<TSource> para retornar o resultado da consulta como uma lista genérica.
Public Function GetAllCustomers() As List(Of Customer)
Dim customers1 = From cust In domesticCustomers
Dim customers2 = From cust In internationalCustomers
Dim customerList = customers1.Union(customers2)
Return customerList.ToList()
End Function
Para obter detalhes sobre recursos LINQ adicionais, consulte Visão geral operadores de consulta padrão.
Conectando-se a um banco de dados usando LINQ to SQL
Na Visual Basic,identifique os objetos de banco de dados SQL Server, como tabelas, visões e procedimentos armazenados, que você deseja acessar, usando um arquivo LINQ to SQL.Um arquivo LINQ to SQL possui uma extensão .dbml.
Quando você tiver uma conexão válida para um banco de dados SQL Server, você pode adicionar um modelo de item Classes LINQ to SQL ao seu projeto.Isso exibirá o Object Relational Designer (O/R Designer).O O/R Designer permite que você arraste os itens que você deseja acessar no código do Gerenciador de Servidores / Gerenciador do Banco de Dados para a superfície do designer.O arquivo LINQ to SQL adiciona um objeto DataContext ao seu projeto.Este objeto inclui propriedades e coleções para as tabelas e modos de exibição que você deseja acesso, e os métodos para os procedimentos armazenados que você deseja chamar.Depois de salvar as alterações para o arquivo LINQ to SQL (.dbml), você pode acessar esses objetos no seu código referenciando o objeto DataContext que é definido pelo O/R Designer.O objeto DataContext para seu projeto é nomeado com base no nome do seu arquivo LINQ to SQL.Por exemplo, um arquivo LINQ to SQL Northwind.dbml é chamado criará um objeto DataContext chamado NorthwindDataContext.
Para obter exemplos com instruções passo a passo, consulte Como: consulta um banco de dados usando LINQ (Visual Basic) e Como: chamar um procedimento armazenado usando LINQ (Visual Basic).
Recursos Visual Basic que suportam LINQ
Visual Basic inclui outros recursos notáveis que tornam o uso de LINQ simples e reduzem a quantidade de código que você deve escrever para executar consultas LINQ.Eles incluem o seguinte:
Tipos Anônimos , que permitem criar um novo tipo com base no resultado de consulta.
Variáveis de tipo implícito, que permitem adiar a especificação de um tipo e deixar que o compilador inferir o tipo com base no resultado da consulta.
Métodos de extensão, que permitem estender um tipo existente com seus próprios métodos sem modificar o tipo próprio.
Para obter detalhes, consulte:Visual Basic os recursos que oferecem suporte ao LINQ.
Execução de consultas adiadas e imediatas
A execução da consulta é separada da criação de uma consulta.Depois que uma consulta é criada, sua execução é disparada por um mecanismo separado.Uma consulta pode ser executada assim ele é definida ( execução imediata ), ou a definição pode ser armazenada e a consulta pode ser executada posteriormente ( execução adiada ).
Por padrão, quando você cria uma consulta, ela não é executada imediatamente.Em vez disso, o definição de consulta é armazenada na variável que é usada para fazer referência ao resultado da consulta.Quando a variável de resultados de consulta for acessada mais tarde no código, como em um loop For…Next, a consulta é executada.Esse processo é conhecido como execução adiada .
As consultas também podem ser executadas quando eles são definidos, que é conhecido como execução imediata .Você pode acionar a execução imediata, aplicando um método que exige acesso aos elementos individuais do resultado da consulta.Isso pode ser o resultado de uma função agregada, como Count, incluindo Sum, Average, Min, ou Max.Para obter mais informações sobre funções agregadas, consulte Cláusula Aggregate (Visual Basic).
Usar os métodos ToList ou ToArray também forçará a execução imediata.Isso pode ser útil quando você deseja executar a consulta imediatamente e armazenar em cache os resultados.Para obter mais informações sobre estes métodos, consulte Convertendo tipos de dados.
Para obter mais informações sobre a execução da consulta, consulte Gravando a primeira consulta LINQ (Visual Basic).
XML no Visual Basic
Funcionalidades XML no Visual Basic, incluem literais XML e propriedades de eixo XML, que permitem facilmente criar, acessar, consultar e modificar XML no seu código.Literais XML permitem escrever XML diretamente em seu código.O compilador Visual Basic trata o XML como um objeto de dados de primeira classe.
O exemplo de código a seguir mostra como criar um elemento XML, acessar suas sub-elementos e atributos e consultar o conteúdo do elemento usando LINQ.
' Place Imports statements at the top of your program.
Imports <xmlns:ns="http://SomeNamespace">
Module Sample1
Sub SampleTransform()
' Create test by using a global XML namespace prefix.
Dim contact =
<ns:contact>
<ns:name>Patrick Hines</ns:name>
<ns:phone ns:type="home">206-555-0144</ns:phone>
<ns:phone ns:type="work">425-555-0145</ns:phone>
</ns:contact>
Dim phoneTypes =
<phoneTypes>
<%= From phone In contact.<ns:phone>
Select <type><%= phone.@ns:type %></type>
%>
</phoneTypes>
Console.WriteLine(phoneTypes)
End Sub
End Module
Para obter mais informações, consulte XML no Visual Basic.
Recursos relacionados
Tópico |
Descrição |
Descreve os recursos XML no Visual Basic que podem ser consultados e que permitem incluir XML como objetos de dados de primeira-classe no seu código Visual Basic . |
|
Fornece informações de referência sobre as cláusulas de consulta que estão disponíveis no Visual Basic. |
|
Inclui informações gerais, orientação de programação e exemplos para LINQ. |
|
Inclui informações gerais, orientação de programação e exemplos para LINQ to SQL. |
|
Inclui informações gerais, orientação de programação e exemplos para LINQ to Objects. |
|
Inclui links para informações gerais, orientação de programação, e os exemplos para LINQ te o ADO.NET. |
|
Inclui informações gerais, orientação de programação e exemplos para LINQ to XML. |
Tópicos Como Fazer e Passo a Passo
Como: consulta um banco de dados usando LINQ (Visual Basic)
Como: chamar um procedimento armazenado usando LINQ (Visual Basic)
Como: modificar dados em um banco de dados usando LINQ (Visual Basic)
Como: combinar dados com LINQ usando associações (Visual Basic)
Como: classificar os resultados da consulta usando LINQ (Visual Basic)
Como: filtrar os resultados da consulta usando LINQ (Visual Basic)
Como: Contar, soma ou média de dados usando LINQ (Visual Basic)
Walkthrough: Creating LINQ to SQL Classes (O/R Designer)
How to: Assign Stored Procedures to Perform Updates, Inserts, and Deletes (O/R Designer)
Capítulos caracterizados de livro
Chapter 17: LINQ Em Programming Visual Basic 2008
Consulte também
Tarefas
Conceitos
Visão geral do LINQ to XML em Visual Basic
DataContext Methods (O/R Designer)