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

Este tópico fornece uma breve introdução a LINQ (consulta integrada à linguagem) expressões em Visual Basic e alguns dos tipos típicos de operações executadas em uma consulta. Para obter mais informações, consulte os seguintes tópicos:

Introdução ao LINQ no Visual Basic

Consultas(Visual Basic)

Especificando a fonte de dados (de)

Em um LINQ a consulta, a primeira etapa é especificar a fonte de dados que deseja fazer a consulta. Portanto, o cláusula deFrom em uma consulta sempre vem em primeiro lugar. Operadores de consulta Selecionar e a forma do resultado com base no tipo de origem.

Dim query = From cust In customers
'           ...

O From cláusula Especifica a fonte de dados, customerse um a variável de intervalo, cust. A variável de intervalo é como uma variável de iteração do loop, exceto em uma expressão de consulta, nenhuma interação real ocorre. Quando a consulta é executada, geralmente usando um For Each a variável de intervalo de loop, serve como uma referência para cada elemento sucessivo customers. Porque o compilador pode inferir o tipo de cust, você não precisará especificá-la explicitamente. Para obter exemplos de consultas escritas com e sem digitação explícita, consulte Relações de tipo em operações de consulta (Visual Basic).

Para obter mais informações sobre como usar o From cláusula Visual Basic, consulte A partir da cláusula (Visual Basic).

Filtragem de dados (onde)

Provavelmente, a operação de consulta mais comuns é aplicando um filtro na forma de uma expressão booleana. A consulta retorna apenas aqueles elementos para os quais a expressão for verdadeira. A Where cláusula é usada para executar a filtragem. O filtro especifica quais elementos da fonte de dados para incluir na seqüência resultante. No exemplo a seguir, os clientes que possuem um endereço em Londres estã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 um Where cláusula. Por exemplo, para retornar somente os clientes que são de Londres e cujo nome é Juliana Paes, use o seguinte código:

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

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

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

Para obter mais informações sobre como usar o Where cláusula Visual Basic, consulte Clúasula Where (Visual Basic).

Ordenação de dados (Order By)

Muitas vezes é conveniente classificar os dados retornados em uma ordem específica. O Order By cláusula fará com que os elementos na seqüência retornado seja classificada em um campo especificado ou campos. Por exemplo, a consulta a seguir classifica os resultados com base na Name propriedade. Porque Name é uma seqüência, os dados retornados serão classificados em ordem alfabética, de à z

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

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

Para obter mais informações sobre como usar o Order By cláusula Visual Basic, consulte Cláusula Order By (Visual Basic).

Selecionando dados (Select)

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

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

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

Se um Customer instância é um objeto grande, que possui muitos campos e tudo o que você deseja recuperar é o nome, você pode selecionar cust.Name, conforme mostrado no exemplo a seguir. Inferência de tipo local reconhece que isso altera o tipo de resultado de uma coleção de Customer objetos a uma coleção de seqüências 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 da fonte de dados, você tem duas opções:

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

    Como os elementos retornados no exemplo a seguir são instâncias de um tipo anônimo, você não pode referir ao tipo por nome em outro lugar no seu código. O nome designado pelo compilador para o tipo contém caracteres que não são válidos em código de Visual Basic normal. No exemplo a seguir, os elementos na coleção que é retornado pela consulta no 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 -

  • Definir um tipo nomeado que contém os campos específicos que você deseja incluir no resultado e criar e inicializar instâncias do tipo de Select cláusula. Use esta opção somente se você tem que usar os resultados individuais fora da coleção na qual são retornados ou se você tiver passá-los como parâmetros em chamadas de método. O tipo de londonCusts5 no exemplo a seguir é IEnumerable(Of NamePhone).

    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 o Select cláusula Visual Basic, consulte Cláusula Select (Visual Basic).

Ligação de dados (associação e associação de grupo)

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

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 dos alunos, criado em Como: Criar uma lista de itens.

O Join palavra-chave é equivalente a uma INNER JOIN SQL. Ele combina duas coleções com base em valores de chave de correspondência entre os elementos em duas coleções. A consulta retorna todo ou parte dos elementos de coleção que têm valores de chaves correspondentes. Por exemplo, o código a seguir duplica a ação da associação implícita 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 Joincombina os conjuntos em uma única coleção hierárquica, exatamente como um LEFT JOIN SQL. Para obter mais informações, consulte Cláusula de adição (Visual Basic) e Cláusula Join Group (Visual Basic).

Dados de agrupamento (grupo por)

Você pode adicionar um Group By cláusula agrupar os elementos em um resultado de consulta de acordo com um ou mais campos de elementos. Por exemplo, o código a seguir agrupa os alunos por ano de 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ê executar esse código usando a lista dos alunos, criado em Como: Criar uma lista de itens, a saída da For Each instrução é:

Ano: Júnior

    Tucker, Michael

    Garcia, Hugo

    Garcia, Suzana

    Tucker, Lance

    

Ano: Sênior

    Omelchenko, Svetlana

    Osada, Michiko

    Fakhouri, Fadi

    Feng, Hanying

    Adams, Terry

    

Ano: Freshman

    Mortensen, Sven

    Garcia, Cesar

A variação mostrada no código a seguir Ordena os anos de classe e ordena os alunos dentro de cada ano pelo 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 o Group By, consulte Cláusula Group By (Visual Basic).

Consulte também

Referência

IEnumerable<T>

Conceitos

Visão geral operadores de consulta padrão

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

Outros recursos

Guia de Introdução do LINQ em Visual Basic

Consultas(Visual Basic)

LINQ no Visual Basic