Partilhar via


Operações básicas de consulta (Visual Basic)

Este tópico fornece uma breve introdução às expressões de LINQ (Consulta Integrada à Linguagem) em Visual Basic, e a alguns dos tipos comuns das operações que você executa uma consulta em.Para obter mais informações, consulte os seguintes tópicos:

Introdução ao LINQ em Visual Basic

Consultas (Visual Basic)

Passo a passo: Escrever consultas em Visual Basic

Especificando a fonte de dados (de)

Em uma consulta de LINQ , a primeira etapa é para especificar a fonte de dados que você deseja consulte.Como consequência, a cláusula de From em uma consulta vem sempre primeiro. Operadores de consulta selecione e desenhar formas o resultado com base no tipo de fonte.

Dim query = From cust In customers
'           ...

A cláusula de From especifica a fonte de dados, customers, e uma variável de intervalo, cust.A variável de intervalo é como uma variável de iteração do loop, exceto que em uma expressão de consulta, nenhuma iteração real ocorre.Quando a consulta é executada, geralmente usando um loop de For Each , a variável de intervalo serve como uma referência a cada elemento são em customers.Porque o compilador pode inferir o tipo de cust, você não tem que especifica explicitamente.Para exemplos de consultas escritas com e sem digitar explícito, consulte Relações de tipo em operações de consulta (Visual Basic).

Para obter mais informações sobre como usar a cláusula de From no Visual Basic (Visual Basic) da cláusula FROM, consulte.

Filtragem de dados (onde)

Provavelmente a maioria de operação comuns de consulta está aplicando um filtro na forma de uma expressão booleana.A consulta retorna apenas nesses elementos para que a expressão for verdadeira.Uma cláusula de Where é usada para executar filtragem.O filtro especifica que os elementos na fonte de dados para incluir na sequência resultante.No exemplo, somente os clientes que possuem um endereço de Londres são incluídos.

Dim londonCusts = From cust In customers
                  Where cust.City = "London"
'                 ...

Você pode usar os operadores lógicos como And e Or para combinar expressões de filtro em uma cláusula de Where .Por exemplo, para retornar somente os clientes que são de Londres e o cujo nome é Devon, use o seguinte código:

Where cust.City = "London" And cust.Name = "Devon" 

Para retornar clientes de Londres ou de Paris, use o seguinte código:

Where cust.City = "London" Or cust.City = "Paris" 

Para obter mais informações sobre como usar a cláusula de Where no Visual Basic Onde a cláusula (Visual Basic), consulte.

Ordenando dados (ordem por)

É conveniente classificar os dados retornados em uma ordem específica.A cláusula de Order By fará com que os elementos na sequência retornado para ser classificados em um campo ou campos especificados.Por exemplo, a seguinte consulta classifica o com base nos resultados na propriedade de Name .Porque Name é uma cadeia de caracteres, os dados retornados serão classificados em ordem alfabética, A Z.

Dim londonCusts1 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
'                   ...

Para ordenar os resultados em ordem inversa, a Z, use a cláusula de Order By...Descending .O padrão é Ascending quando Ascending nem nem Descending são especificados.

Para obter mais informações sobre como usar a cláusula de Order By em Visual Basic, consulte Ordem por cláusula (Visual Basic).

Selecionando dados (selecionar)

A cláusula de Select especifica o formulário e o conteúdo dos elementos retornados.Por exemplo, você pode especificar se os resultados consistirão em objetos completos de Customer , apenas uma propriedade de Customer , um subconjunto de propriedades, uma combinação de propriedades de várias fontes de dados, ou qualquer novo tipo do resultado com base em uma computação.Quando a cláusula de Select produz algo diferente de uma cópia do elemento de origem, a operação é chamada uma projeção.

Para recuperar uma coleção que consiste em objetos completos de Customer , selecione a variável de intervalo:

Dim londonCusts2 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust

Se uma instância de Customer grande é um objeto que tem vários campos, e tudo o que você deseja recuperar é o nome, você pode selecionar cust.Name, conforme mostrado no exemplo o seguir.Inferência de tipos local que reconhece essa altera o tipo do resultado de uma coleção de objetos de Customer a uma coleção de cadeias de caracteres.

Dim londonCusts3 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust.Name

Para selecionar vários campos de fonte de dados, você tem duas opções:

  • Na cláusula de Select , especifique os campos que você deseja incluir no resultado.O compilador definirá um tipo anônimo que tem aqueles campos como suas propriedades.Para obter mais informações, consulte Tipos anônimos (Visual Basic).

    Porque os elementos retornados no exemplo a seguir são instâncias de um tipo anônimo, você não pode se referir ao tipo por nome em qualquer lugar no seu código.O nome de compilador designado para o tipo contém caracteres que não são válidos em código Visual Basic normal.No exemplo, os elementos na coleção que é retornada pela consulta em londonCusts4 são instâncias de um tipo anônimo

            Dim londonCusts4 = From cust In customers
                               Where cust.City = "London"
                               Order By cust.Name Ascending
                               Select Name = cust.Name, Phone = cust.Phone
    
            For Each londonCust In londonCusts4
                Console.WriteLine(londonCust.Name & " " & londonCust.Phone)
            Next
    
    

    -  ou  -

  • Defina um tipo nomeado que contém os campos particulares que você deseja incluir em resultado, e cria e inicializa instâncias de tipo na cláusula de Select .Use esta opção somente se você tem que usar resultados individuais fora da coleção em que são retornados, ou se você tiver que a passar como parâmetros no método chama.O tipo de londonCusts5 no exemplo de NamePhone é IEnumerable ().

    Public Class NamePhone
        Public Name As String
        Public Phone As String
        ' Additional class elements
    End Class
    
    Dim londonCusts5 = From cust In customers
                       Where cust.City = "London"
                       Order By cust.Name Ascending
                       Select New NamePhone With {.Name = cust.Name,
                                                  .Phone = cust.Phone}
    

Para obter mais informações sobre como usar a cláusula de Select no Visual Basic Selecione a cláusula (Visual Basic), consulte.

Dados do join (se junte e group join)

Você pode combinar mais de uma fonte de dados na cláusula de From de várias maneiras.Por exemplo, o código a seguir usa duas fontes de dados e combina implicitamente propriedades de ambos são no resultado.A consulta selecionar os alunos cujos sobrenomes começam com uma vogais.

Dim vowels() As String = {"A", "E", "I", "O", "U"}
Dim vowelNames = From student In students, vowel In vowels
                 Where student.Last.IndexOf(vowel) = 0
                 Select Name = student.First & " " &
                 student.Last, Initial = vowel
                 Order By Initial

For Each vName In vowelNames
    Console.WriteLine(vName.Initial & ":  " & vName.Name)
Next
ObservaçãoObservação

Você pode executar esse código com a lista de alunos criados em Como: criar uma lista de itens.

A palavra-chave de Join é equivalente a INNER JOIN o SQL.Combina duas coleções baseadas nos valores chave entre elementos em duas coleções.A consulta retorna o todo ou parte dos elementos da coleção que têm valores das chaves correspondentes.Por exemplo, o seguinte código duplica a ação do join implícito anterior.

Dim vowelNames2 = From student In students
                  Join vowel In vowels
                  On student.Last(0) Equals vowel
                  Select Name = student.First & " " &
                  student.Last, Initial = vowel
                  Order By Initial

Group Join combina coleções em uma única coleção hierárquica, assim como LEFT JOIN o SQL.Para obter mais informações, consulte (Visual Basic) da cláusula de associação e Cláusula de associação de grupo (Visual Basic).

Dados de agrupamento (group by)

Você pode adicionar uma cláusula group Group By para os elementos em um resultado de consulta de acordo com um ou mais campos de elementos.Por exemplo, os seguintes alunos de grupos de código no ano da classe.

Dim studentsByYear = From student In students
                     Select student
                     Group By year = student.Year
                     Into Classes = Group

For Each yearGroup In studentsByYear
    Console.WriteLine(vbCrLf & "Year: " & yearGroup.year)
    For Each student In yearGroup.Classes
        Console.WriteLine("   " & student.Last & ", " & student.First)
    Next
Next

Se você executa esse código usando a lista de alunos criados em Como: criar uma lista de itens, a instrução de For Each são:

Ano: Júnior

    Tucker, Michael

    García, Hugo

    García, Debra

    Tucker, lança

    

Ano: Superior

    Omelchenko, Svetlana

    Osada, Michiko

    Fakhouri, Fadi

    Feng, Hanying

    Adams, Terry

    

Ano: Caloiro

    Mortensen, Sven

    García, Cesar

A variação mostrada no código a seguir as regras dos anos da classe, e pedidos nos alunos em todos os anos por sobrenome.

Dim studentsByYear2 = From student In students
                      Select student
                      Order By student.Year, student.Last
                      Group By year = student.Year
                      Into Classes = Group

Para obter mais informações sobre Group By, consulte Agrupar por cláusula (Visual Basic).

Consulte também

Referência

IEnumerable<T>

Conceitos

Visão geral operadores de consulta padrão

Operações de consulta do LINQ básicas (C#)

Outros recursos

Guia de Introdução do LINQ em Visual Basic

Consultas (Visual Basic)

LINQ em Visual Basic