Introdução ao LINQ no 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 vinculadas a controles para que os usuários possam 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.

Dim customers As List(Of Customer) = GetCustomerList()

Dim customersByCountry = From cust In customers _
                         Order By cust.Country, cust.City _
                         Group By CountryName = cust.Country _
                         Into RegionalCustomers = Group, Count() _
                         Order By CountryName

For Each country In customersByCountry
  Console.WriteLine(country.CountryName & _
                    " (" & country.Count & ")" & vbCrLf)

  For Each customer In country.RegionalCustomers
    Console.WriteLine(vbTab & customer.CompanyName & _
                      " (" & customer.City & ")")
  Next
Next

Neste tópico, você encontrará informações sobre as seguintes áreas:

  • Provedores LINQ

  • A 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

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.

  • LINQ para Objetos
    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 para Objetos.

  • LINQ to 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).Esse designer é usado para criar um modelo de objeto em um aplicativo que mapeia para objetos em um banco de dados. Designer Relacional de Objetos também fornece funcionalidade para mapear procedimentos armazenados e funções para o DataContext objeto, que gerencia a comunicação com o banco de dados e armazena o estado para verificações de simultaneidade otimista.

    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 to 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 to 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.

A 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 queryResults = From cust In customers _
                   Select cust.CompanyName

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 = "USA"

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 = "USA" _
               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 queryResults = From cust In customers, ord In orders _
                   Where cust.CustomerID = ord.CustomerID _
                   Select cust, ord

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 queryResults = From cust In customers _
                   Group Join ord In orders On _
                     cust.CustomerID Equals ord.CustomerID _
                     Into CustomerOrders = Group, _
                          OrderTotal = Sum(ord.Total) _
                   Select cust.CompanyName, cust.CustomerID, _
                          CustomerOrders, OrderTotal

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 a System.Linq espaço para nome e os namespaces que oferecem suporte a consultas do LINQ incluem métodos que você pode chamar para criar e refinar as consultas com base nas necessidades do seu aplicativo. Visual Basic inclui palavras-chave para cláusulas de consulta mais comuns, sistema autônomo descrito na tabela a seguir.

  • A partir da cláusula (Visual Basic)
    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:

    ' Returns the company name for all customers for whom
    ' State is equal to "WA".
    Dim names = From cust In customers _
                Where cust.State = "WA" _
                Select cust.CompanyName
    
  • Cláusula Select (Visual Basic)
    Opcional.Declara um conjunto de variáveis de iteração para uma consulta.Por exemplo:

    ' Returns the company name and ID value for each
    ' customer as a collection of a new anonymous type.
    Dim customerList = From cust In customers _
                       Select cust.CompanyName, cust.CustomerID
    

    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 .

  • Clúasula Where (Visual Basic)
    Opcional.Especifica a condição de filtragem para uma consulta.Por exemplo:

    ' Returns all product names for which the Category of
    ' the product is "Beverages".
    Dim names = From product In products _
                Where product.Category = "Beverages" _
                Select product.Name
    
  • Ordem By cláusula (Visual Basic)
    Opcional.Especifica o ordem de classificação para colunas em uma consulta.Por exemplo:

    ' Returns a list of books sorted by price in 
    ' ascending order.
    Dim titlesAscendingPrice = From b In books _
                               Order By b.price
    
  • Cláusula de adição (Visual Basic)
    Opcional.Combina duas coleções numa única.Por exemplo:

    ' Returns a combined collection of all of the 
    ' processes currently running and a descriptive
    ' name for the process taken from a list of 
    ' descriptive names.
    Dim processes = From proc In Process.GetProcesses _
                    Join desc In processDescriptions _
                      On proc.ProcessName Equals desc.ProcessName _
                    Select proc.ProcessName, proc.Id, desc.Description
    
  • agrupar By cláusula (Visual Basic)
    Opcional.Agrupa os elementos de um resultado de consulta.Pode ser usado para aplicar funções agregadas a cada grupo.Por exemplo:

    ' Returns a list of orders grouped by the order date
    ' and sorted in ascending order by the order date.
    Dim orderList = From order In orders _
                    Order By order.OrderDate _
                    Group By OrderDate = order.OrderDate _
                    Into OrdersByDate = Group
    
  • Cláusula Join Group (Visual Basic)
    Opcional.Combina duas coleções numa única coleção hierarquizada.Por exemplo:

    ' Returns a combined collection of customers and
    ' customer orders.
    Dim customerList = From cust In customers _
                       Group Join ord In orders On _
                         cust.CustomerID Equals ord.CustomerID _
                       Into CustomerOrders = Group, _
                            TotalOfOrders = Sum(ord.Total) _
                       Select cust.CompanyName, cust.CustomerID, _
                              CustomerOrders, TotalOfOrders
    
  • Aggregate Clause (Visual Basic)
    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.

    ' Returns the sum of all order totals.
    Dim orderTotal = Aggregate order In orders _
                     Into Sum(order.Total)
    

    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.

    ' Returns the customer company name and largest 
    ' order total for each customer.
    Dim customerMax = From cust In customers _
                      Aggregate order In cust.Orders _
                      Into MaxOrder = Max(order.Total) _
                      Select cust.CompanyName, MaxOrder
    
  • Cláusula Let (Visual Basic)
    Opcional.Calcula um valor e a atribui a uma nova variável na consulta.Por exemplo:

    ' Returns a list of products with a calculation of
    ' a ten percent discount.
    Dim discountedProducts = From prod In products _
                             Let Discount = prod.UnitPrice * 0.1 _
                             Where Discount >= 50 _
                             Select prod.Name, prod.UnitPrice, Discount
    
  • Cláusula Distinta (Visual Basic)
    Opcional.Restringe os valores da variável de iteração atual para eliminar valores duplicados nos resultados da consulta.Por exemplo:

    ' Returns a list of cities with no duplicate entries.
    Dim cities = From item In customers _
                 Select item.City _
                 Distinct
    
  • Ignorar a cláusula (Visual Basic)
    Opcional.Ignora um número especificado de elementos em uma coleção e, em seguida, retorna os elementos restantes.Por exemplo:

    ' Returns a list of customers. The first 10 customers
    ' are ignored and the remaining customers are
    ' returned.
    Dim customerList = From cust In customers _
                       Skip 10
    
  • Ignorar Cláusula While (Visual Basic)
    Opcional.Ignora elementos numa coleção enquanto a condição especificada é true e então retorna os elementos restantes.Por exemplo:

    ' Returns a list of customers. The query ignores all
    ' customers until the first customer for whom
    ' IsSubscriber returns false. That customer and all
    ' remaining customers are returned.
    Dim customerList = From cust In customers _
                       Skip While IsSubscriber(cust)
    
  • Tomar cláusula (Visual Basic)
    Opcional.Retorna um número especificado de elementos contíguos do início de uma coleção.Por exemplo:

    ' Returns the first 10 customers.
    Dim customerList = From cust In customers _
                       Take 10
    
  • Levar ao cláusula (Visual Basic)
    Opcional.Ignora elementos numa coleção desde que uma condição especificada seja true e então retorna os elementos restantes.Por exemplo:

    ' Returns a list of customers. The query returns
    ' customers until the first customer for whom 
    ' HasOrders returns false. That customer and all 
    ' remaining customers are ignored.
    Dim customersWithOrders = From cust In customers _
                              Order By cust.Orders.Count Descending _
                              Take While HasOrders(cust)
    

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.

VbVbalrIntroToLINQ#22

Para obter detalhes sobre recursos LINQ adicionais, consulte Visão geral sobre 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: telefonar um procedimento armazenado com o 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:Recursos Visual Basic que suportam 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 Aggregate Clause (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 Converter tipos de dados.

Para obter mais informações sobre a execução de consulta, consulte Gravar sua consulta LINQ Primeiro (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 subelementos 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

  • XML no Visual Basic
    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 .

  • Consultas(Visual Basic)
    Fornece informações de referência sobre as cláusulas de consulta que estão disponíveis no Visual Basic.

  • Language-Integrated Query (LINQ)
    Inclui informações gerais, orientação de programação e exemplos para LINQ.

  • LINQ to SQL
    Inclui informações gerais, orientação de programação e exemplos para LINQ to SQL.

  • LINQ para Objetos
    Inclui informações gerais, orientação de programação e exemplos para LINQ to Objects.

  • LINQ para o ADO.NET (página de portal)
    Inclui links para informações Geral, programação orientações e exemplos de LINQ para ADO.NET.

  • LINQ to XML
    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: telefonar um procedimento armazenado com o LINQ (Visual Basic)

Como: Para modificar dados em um banco de dados, usando o LINQ (Visual Basic)

Como: agrupar dados com o LINQ por meio de relações (Visual Basic)

Como: Classificar uma coleção usando o LINQ (Visual Basic)

Como: Filtrar resultados da consulta usando o LINQ (Visual Basic)

Como: Contar, soma ou médio dados usando LINQ (Visual Basic)

Como: Localizar o mínimo ou máximo valor em um resultado da consulta, usando o 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)

Consulte também

Conceitos

Visão geral de LINQ to XML em Visual Basic

LINQ to DataSet Overview

DataContext Methods (O/R Designer)

Outros recursos

Language-Integrated Query (LINQ)

LINQ to SQL

Exemplos LINQ

Object Relational Designer (O/R Designer)