Compartilhar via


Demonstra Passo a passo: Escrever consultas em Visual Basic

Esta explicação passo a passo demonstra como você pode usar os recursos de linguagem Visual Basic gravar LINQ (consulta integrada à linguagem) expressões de consulta.  A explicação passo a passo mostra como criar consultas em uma lista de objetos Student, a forma de executar as consultas, e como fazer para modificá-las As consultas incorporam vários novos recursos do Visual Basic 2008, incluindo os inicializadores de objeto, a inferência de tipo local e tipos anônimos.

Depois de concluir este passo a passo, você está pronto para passar para os exemplos e documentações específicos do LINQ provedor que você está interessado. LINQprovedores incluem LINQ to SQL, LINQ to DataSet, e LINQ to XML.

link para vídeo Para obter uma versão de vídeo deste tópico, consulte vídeo How to: Escrever consultas em Visual Basic.

Criar um projeto.

Para criar um projeto que a versão destinos 3.5 ou posterior do.NET Framework

  1. Inicie o Visual Studio 2008

  2. No menu File, clique em New Project.

  3. Clique em Aplicativo de Console e, em seguida, clique em OK.

    Um projeto é criado. Por padrão, ele contém uma referência a System.Core.dll e um Imports a instrução para o System.Linq namespace, que são necessários para executar o LINQ consultas.

Adicionar uma fonte de dados na memória

A fonte de dados para as consultas, esta explicação passo a passo é uma lista de Student objetos. Cada Student objeto contém um nome, sobrenome, um ano de classe e uma classificação Acadêmica do corpo do aluno.

Para criar a fonte de dados

  • Definir um Student de classe e criar uma lista de instâncias da classe a.

    Observação importanteImportante

    O código necessário para definir o Student de classe e criar a lista usada na explicação exemplos é fornecido no Como: Criar uma lista de itens. Você poderá Copiar o código deste exemplo e colá-lo em seu projeto. O novo código substituirá o código que apareceu quando você Criou o projeto.

Para adicionar um novo estudante para a lista de alunos

Criar uma consulta

Quando executado o codigo, a consulta adicionada nesta seção produz uma lista dos alunos cuja classificação são os 10 primeiros. Porque a consulta seleciona o completo Student o objeto cada vez, o tipo de resultado da consulta é IEnumerable(Of Student). No entanto, o tipo de consulta normalmente não for especificado nas definições de consulta. Em vez disso, o compilador usa a inferência de tipo local para determinar o tipo. Para obter mais informações, consulte Inferência de tipo de variável local (Visual Basic). Variável de intervalo da consulta, currentStudent, que serve como uma referência a cada Student instância na fonte de students, fornecendo acesso às propriedades de cada objeto no students.

Para criar uma consulta simples

  1. Localizar no local a Main o método do projeto que está marcado como segue:

    ' ****Paste query and query execution code from the walkthrough,
    ' ****or any code of your own, here in Main.
    

    Copie o seguinte código e colá-lo no.

    Dim studentQuery = From currentStudent In students
                       Where currentStudent.Rank <= 10
                       Select currentStudent
    
  2. Posicione o ponteiro do mouse studentQuery em seu código para verificar se o tipo de compilador atribuído é IEnumerable(Of Student).

Executar a consulta.

A variável studentQuery contém a definição da consulta, não os resultados da execução da consulta. Um mecanismo típico para executar uma consulta é um For Each loop. Cada elemento da seqüência retornada é acessado através da variável de iteração do loop. Para obter mais informações sobre a execução de consulta, consulte Gravando a primeira consulta LINQ (Visual Basic).

Para executar a consulta

  1. Adicione o seguinte For Each loop abaixo da consulta no seu projeto.

    For Each studentRecord In studentQuery
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First)
    Next
    
  2. Posicione o ponteiro do mouse sobre a variável de controle de loop studentRecord para ver o seu tipo de dados. O tipo de studentRecord é inferido para ser Student, pois studentQuery retorna uma coleção de Student instâncias.

  3. Compile e execute o aplicativo pressionando CTRL F5. Observe os resultados na janela do console Observe os resultados na janela do console.

Modificar a consulta.

É mais fácil examinar os resultados da consulta se eles estiverem em uma ordem especificada. Você pode classificar a seqüência retornada com base em qualquer campo disponível.

A ordem dos resultados

  1. Adicione o seguinte Order By cláusula entre a Where instrução e a Select a instrução da consulta. O Order By cláusula irá solicitar os resultados em ordem alfabética, de À Z, de acordo com ao sobrenome de cada aluno.

    Order By currentStudent.Last Ascending 
    
  2. Para fazer o pedido por sobrenome e nome, adicione os dois campos à consulta:

    Order By currentStudent.Last Ascending, currentStudent.First Ascending 
    

    Você também pode especificar Descending a ordem de z a.

  3. Compile e execute o aplicativo pressionando CTRL F5. Observe os resultados na janela do console Observe os resultados na janela do console.

Apresentar um identificador de local

  1. Adicionar o código da seção abaixo para apresentar um identificador de local na expressão de consulta. O identificador local manterá um resultado intermediário. No exemplo a seguir, name é um identificador que mantém uma concatenação de student primeiro e último nomes. Um identificador de local pode ser usado para sua conveniência, ou ela pode melhorar o desempenho armazenando os resultados de uma expressão que caso contrário, será calculada "n" vezes.

    Dim studentQuery2 =
            From currentStudent In students
            Let name = currentStudent.Last & ", " & currentStudent.First
            Where currentStudent.Year = "Senior" And currentStudent.Rank <= 10
            Order By name Ascending
            Select currentStudent
    
    ' If you see too many results, comment out the previous
    ' For Each loop.
    For Each studentRecord In studentQuery2
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First)
    Next
    
  2. Compile e execute o aplicativo pressionando CTRL F5. Observe os resultados na janela do console Observe os resultados na janela do console.

Para um campo de projeto na cláusula Select

  1. Adicionar a consulta e For Each loop desta seção para criar uma consulta que produz uma seqüência cujos elementos diferem dos elementos na origem. No exemplo a seguir, a fonte é uma coleção de Student objetos, mas apenas um membro de cada objeto é retornado: o nome dos alunos cujo sobrenome seja Garcia. Porque currentStudent.First é uma seqüência, o tipo de dados da seqüência retornado por studentQuery3 é IEnumerable(Of String), uma seqüência de cadeias de caracteres. Como nos exemplos anteriores, a atribuição de um dado tipo de studentQuery3 é deixada para o compilador determinar usando inferência de tipo local.

    Dim studentQuery3 = From currentStudent In students
                        Where currentStudent.Last = "Garcia"
                        Select currentStudent.First
    
    ' If you see too many results, comment out the previous
    ' For Each loops.
    For Each studentRecord In studentQuery3
        Console.WriteLine(studentRecord)
    Next
    
  2. Posicione o ponteiro do mouse studentQuery3 em seu código para verificar se o tipo de atribuído é IEnumerable(Of String).

  3. Compile e execute o aplicativo pressionando CTRL F5. Observe os resultados na janela do console Observe os resultados na janela do console.

Para criar um tipo anônimo na cláusula Select

  1. Adicionar o código desta seção para ver como tipos anônimos são usados em consultas. Tipos anônimos são um novo recurso do Visual Basic 2008. Usá-los em consultas quando quiser retornar vários campos da fonte de dados em vez de registros completos (currentStudent registros nos exemplos anteriores) ou campos de simples (First na seção anterior). Em vez de definir um novo tipo nomeado que contém os campos que você deseja incluir no resultado, você especificar os campos de cláusula deSelect e o compilador cria um tipo anônimo com esses campos como suas propriedades. Para obter mais informações, consulte Tipos anônimos (Visual Basic).

    O exemplo a seguir cria uma consulta que retorna o nome e a classificação dos seniores cuja posição acadêmica está entre 1 e 10, em ordem crescente acadêmico. Neste exemplo, o tipo de studentQuery4 deve ser deduzido porque a Select cláusula retorna uma instância de um tipo anônimo, e tem de um tipo anônimo sem nome utilizável.

    Dim studentQuery4 =
            From currentStudent In students
            Where currentStudent.Year = "Senior" And currentStudent.Rank <= 10
            Order By currentStudent.Rank Ascending
            Select currentStudent.First, currentStudent.Last, currentStudent.Rank
    
    ' If you see too many results, comment out the previous
    ' For Each loops.
    For Each studentRecord In studentQuery4
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First &
                          ":  " & studentRecord.Rank)
    Next
    
  2. Compile e execute o aplicativo pressionando CTRL F5. Observe os resultados na janela do console Observe os resultados na janela do console.

Exemplos adicionais

Agora que você entenda os fundamentos, a seguir está uma lista de exemplos adicionais para ilustrar a flexibilidade e a potência de LINQ consultas. Cada exemplo é precedido por uma breve descrição do que ele faz. Posicione o ponteiro do mouse sobre a variável de resultado de consulta para cada consulta ver o tipo inferido. Use um For Each o loop para produzir os resultados.

' Find all students who are seniors.
Dim q1 = From currentStudent In students
         Where currentStudent.Year = "Senior"
         Select currentStudent

' Write a For Each loop to execute the query.
For Each q In q1
    Console.WriteLine(q.First & " " & q.Last)
Next

' Find all students with a first name beginning with "C".
Dim q2 = From currentStudent In students
         Where currentStudent.First.StartsWith("C")
         Select currentStudent

' Find all top ranked seniors (rank < 40).
Dim q3 = From currentStudent In students
         Where currentStudent.Rank < 40 And currentStudent.Year = "Senior"
         Select currentStudent

' Find all seniors with a lower rank than a student who 
' is not a senior.
Dim q4 = From student1 In students, student2 In students
         Where student1.Year = "Senior" And student2.Year <> "Senior" And
               student1.Rank > student2.Rank
         Select student1
         Distinct

' Retrieve the full names of all students, sorted by last name.
Dim q5 = From currentStudent In students
         Order By currentStudent.Last
         Select Name = currentStudent.First & " " & currentStudent.Last

' Determine how many students are ranked in the top 20.
Dim q6 = Aggregate currentStudent In students
         Where currentStudent.Rank <= 20
         Into Count()

' Count the number of different last names in the group of students.
Dim q7 = Aggregate currentStudent In students
         Select currentStudent.Last
         Distinct
         Into Count()

' Create a list box to show the last names of students.
Dim lb As New System.Windows.Forms.ListBox
Dim q8 = From currentStudent In students
         Order By currentStudent.Last
         Select currentStudent.Last Distinct

For Each nextName As String In q8
    lb.Items.Add(nextName)
Next

' Find every process that has a lowercase "h", "l", or "d" in its name.
Dim letters() As String = {"h", "l", "d"}
Dim q9 = From proc In System.Diagnostics.Process.GetProcesses,
         letter In letters
         Where proc.ProcessName.Contains(letter)
         Select proc

For Each proc In q9
    Console.WriteLine(proc.ProcessName & ", " & proc.WorkingSet64)
Next

Informações adicionais

Depois que você estiver familiarizado com os conceitos básicos de trabalhar com consultas, você estará pronto para ler a documentação e exemplos para o tipo específico de LINQ provedor que você está interessado em:

LINQ para Objetos

LINQ to SQL

LINQ to XML

LINQ to DataSet

Consulte também

Tarefas

Demonstra Passo a passo: Escrever consultas em C# (LINQ)

Conceitos

Recursos suplementares do LINQ

Inferência de tipo de variável local (Visual Basic)

Inicializadores de objeto: Tipos nomeados e anônimos (Visual Basic)

Tipos anônimos (Visual Basic)

Introdução ao LINQ no Visual Basic

Outros recursos

LINQ (consulta integrada à linguagem)

Guia de Introdução do LINQ em Visual Basic

LINQ no Visual Basic

Consultas(Visual Basic)