Compartilhar via


Passo a passo: Escrever consultas em Visual Basic

Essa explicação passo a passo demonstra como você pode usar recursos de linguagem do Visual Basic para escrever expressões de consulta de LINQ (Consulta Integrada à Linguagem) .A explicação passo a passo demonstra como criar consultas em uma lista de objetos de aluno, como executar consultas, e como modificá-los.Consultas incorporam vários recursos que foram novos no Visual Basic 2008, incluindo inicializadores de objeto, inferência de tipos local, e tipos anônimos.

Após concluir essa explicação passo a passo, você estará pronto para mover sobre os exemplos e a documentação para o provedor específico de LINQ que você está interessado.provedores deLINQ incluem LINQ to SQL, LINQ to DataSet, e LINQ to XML.

Criar um Projeto

Para criar um projeto de aplicativo de console

  1. Inicie o Visual Studio.

  2. No menu File, aponte para New, e em seguida, clique em Project.

  3. Na lista de Modelos Instalados , clique Visual Basic.

  4. Na lista de tipos de projeto, clique Aplicativo de Console.Na caixa de Nome , digite um nome para o projeto, e clique OK.

    Um projeto é criado.Por padrão, contém uma referência a System.Core.dll.Além disso, a lista Namespaces Importados em Referências de página, Designer de projeto (Visual Basic) inclui o namespace System.Linq.

  5. Em Compilar página Project Designer (Visual Basic), certifique-se de que Opção Infer está definido como Ativado.

Adicionar uma fonte de dados em memória

A fonte de dados para consultas nesta explicação passo a passo é uma lista de objetos de Student .Cada objeto de Student contém um nome, sobrenome um, um ano da classe, e uma classificação académico no corpo estudantil.

Para criar a fonte de dados

  • Defina uma classe de Student , e crie uma lista das instâncias da classe.

    Observação importanteImportante

    O código necessário definir a classe de Student e criar a lista usada nos exemplos de passo a passo é fornecido em Como: criar uma lista de itens.Você pode copiá-los de aí e cole-o em seu projeto.O novo código substitui o código que apareceu quando você criou o projeto.

Para adicionar um novo aluno para listar alunos

Criar uma Consulta

Quando executada, a consulta adicionada nesta seção produz uma lista dos alunos cuja classificação académico os coloca em dez chave.Porque a consulta selecionar o objeto Student completo de cada vez, o tipo do resultado da consulta é IEnumerable(Of Student).Entretanto, o tipo de consulta não é normalmente especificado nas definições de consulta.Em vez disso, o compilador usa inferência de tipos local para determinar o tipo.Para obter mais informações, consulte Inferência de tipo de local (Visual Basic).O intervalo variável de consulta, currentStudent, serve como uma referência a cada Student ativa na fonte, students, fornecendo acesso às propriedades de cada objeto em students.

Para criar uma simples consulta

  1. Localizar o local no método de Main de 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 cole-o em.

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

Executar a consulta

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

Para executar a consulta

  1. Adicione o seguinte loop de For Each 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 seu tipo de dados.O tipo de studentRecord é inferido para ser Student, porque studentQuery retorna uma coleção de instâncias de Student .

  3. Compilar e executar o aplicativo pressionando CTRL + f5.Observe os resultados na janela do console.

Modificar a consulta

É mais fácil verificação resultados de consulta se está na ordem especificada.Você pode classificar a sequência retornado com base em qualquer campo disponível.

Para ordenar os resultados

  1. Adicione a seguinte cláusula de Order By de Where entre a declaração e a declaração de Select de consulta.A cláusula de Order By ordenará os resultados em ordem alfabética A Z, de acordo com o sobrenome de cada aluno.

    Order By currentStudent.Last Ascending 
    
  2. Para ordenar por sobrenome e em seguida pelo nome, adicione ambos os campos para a consulta:

    Order By currentStudent.Last Ascending, currentStudent.First Ascending 
    

    Você também pode especificar Descending para a ordem Z.

  3. Compilar e executar o aplicativo pressionando CTRL + f5.Observe os resultados na janela do console.

Para criar um identificador local

  1. Adicione o código nesta seção para introduzir um identificador local na expressão de consulta.O identificador local conterá um resultado intermediária.No exemplo, name é um identificador que contém uma concatenação de nomes de aluno primeiro e último.Um identificador local pode ser usado para sua conveniência, ou pode melhorar o desempenho armazenando os resultados de uma expressão que é calculada de outro modo várias 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. Compilar e executar o aplicativo pressionando CTRL + f5.Observe os resultados na janela do console.

Para projetar um campo na cláusula select

  1. Adicione a consulta e o loop de For Each desta seção para criar uma consulta que produz uma sequência cujos elementos para diferir dos elementos da fonte.No exemplo a seguir, a fonte é uma coleção de objetos de Student , mas somente um membro de cada objeto é retornado: o nome de alunos cujo último é García.Porque currentStudent.First é uma cadeia de caracteres, o tipo de dados da sequência retornada por studentQuery3 é IEnumerable(Of String), uma sequência de cadeias de caracteres.Como nos exemplos anteriores, a atribuição de um tipo de dados para studentQuery3 é deixada para o compilador determina usando inferência de tipos 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 em studentQuery3 em seu código para verificar que o tipo atribuído seja IEnumerable(Of String).

  3. Compilar e executar o aplicativo pressionando CTRL + f5.Observe os resultados na janela do console.

Para criar um anônimo digite na cláusula select

  1. Adicione o código desta seção para ver como tipos anônimos são usados em consultas.Você as usa em consultas quando você deseja retornar vários campos de fonte de dados em vez dos registros completos (registros decurrentStudent em exemplos anteriores) ou os únicos campos (First na seção anterior).Em vez de definir um novo tipo nomeado que contém os campos que você deseja incluir em resultado, você especifica os campos na cláusula de Select e o compilador cria um tipo anônimo com aqueles 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 de séniores cuja classificação académico está entre 1 e 10, em ordem de classificação académico.Nesse exemplo, o tipo de studentQuery4 deve ser inferido porque a cláusula de Select retorna uma instância de um tipo anônimo, e um tipo anônimo não possui um 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. Compilar e executar o aplicativo pressionando CTRL + f5.Observe os resultados na janela do console.

Exemplos adicionais

Agora que você entende as noções básicas, a seguir está uma lista de exemplos adicionais para ilustrar a flexibilidade e o poder de consultas de LINQ .Cada exemplo é precedido por uma breve descrição do que.Posicione o ponteiro do mouse sobre a variável do resultado da consulta para cada consulta para ver o tipo inferidos. Use um loop de For Each para gerar 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ê é familiarizado com os conceitos básicos de trabalhar com consultas, você está pronto para ler a documentação e exemplos para o tipo específico de provedor de LINQ que você está interessado em:

LINQ to Objects

LINQ to SQL

LINQ to XML

LINQ to DataSet

Consulte também

Tarefas

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

Conceitos

Recursos suplementares do LINQ

Inferência de tipo de local (Visual Basic)

Inicializadores de objeto: Nomeados e anônimos tipos (Visual Basic)

Tipos anônimos (Visual Basic)

Introdução ao LINQ em Visual Basic

Outros recursos

LINQ (consulta integrada à linguagem)

Guia de Introdução do LINQ em Visual Basic

LINQ em Visual Basic

Consultas (Visual Basic)