Demonstra Passo a passo: Escrever consultas no Visual Basic

Esta explicação passo a passo orienta durante o novo Visual Basic 2008 linguagem apresenta e demonstra como eles são usados para gravar LINQ (consulta integrada à linguagem) expressões de consulta. Explicação passo a passo demonstra como criar consultas em uma lista de objetos do aluno, como executar as consultas e como modificá-los.As consultas incorporam vários novos recursos de Visual Basic 2008, incluindo os inicializadores de objeto inferência de tiposs de tipo de variável local e tipos anônimo.

Depois de concluir esta explicação passo a passo, você estará pronto para passar para as Exemplos e documentação para o específico LINQ provedor de que seu interesse. LINQ incluem provedores LINQ to SQL, LINQ to DataSet, e LINQ to XML.

Para uma demonstração de vídeo, consulte Vídeo How to: Gravando consultas no Visual Basic.

Criar um projeto

Para criar um projeto que visa versão 3.5 ou posterior do .NET estrutura

  1. Inicie o Visual Studio 2008

  2. On the Arquivo menu, clicar Novo projeto.

  3. clicar Aplicativo de console e, em seguida, clicar OK.

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

Adicionar uma fonte de dados na memória

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

Para criar a fonte de dados

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

    Observação importante:

    O código necessário para definir o Student classe e criar a lista de usados nesta explicação passo a passo exemplos são fornecidas em Como: Criar uma lista de itens. Pode copiá-lo de lá e colá-lo em seu projeto.O novo código substitui o código que apareceram quando você criou o projeto.

Para adicionar um aluno novo à lista os alunos

  • Seguem o padrão no getStudents Para adicionar outra instância do Student classe à lista. Adicionar o aluno apresentará a você os inicializadores de objeto, que são novos no Visual Basic 2008. Para obter mais informações, consulte Inicializadores de objeto: Tipos nomeados e anônimos.

Criar uma consulta

Quando executada, a consulta adicionada nesta seção produz uma lista dos alunos cuja posição acadêmica coloca nos dez primeiros.Porque a consulta seleciona o completaStudent objeto cada vez, o tipo de resultado da consulta é IEnumerable(Of Student). No entanto, o tipo de consulta normalmente não foi especificado nas definições de consulta.Em vez disso, o compilador usa inferência de tipos de tipos local para determinar o tipo.Para obter mais informações, consulte Inferência de tipos local. Intervalo variável, currentStudent, serve sistema autônomo uma referência a cada Student instância na fonte, students, fornecendo acesso às propriedades de cada objeto no students.

Para criar uma consulta simples

  1. Encontrar o local no Main método do projeto que está marcado sistema autônomo sistema autônomo follows:

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

    Copie o código a seguir e cole-o no.

    Dim studentQuery = From currentStudent In students _
                       Where currentStudent.Rank <= 10 _
                       Select currentStudent
    
  2. Posicione o ponteiro do mouse sobre studentQuery em seu código para verificar se o tipo atribuído pelo compilador 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 sequência retornada é acessado através da variável de iteração de loop.Para obter mais informações sobre a execução de consulta, consulte Gravar sua consulta LINQ primeira (Visual Basic).

Para executar a consulta

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

    For Each studentRecord In studentQuery
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First)
    Next
    
  2. Coloque o ponteiro do mouse sobre o loop de controlar a variável 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. Criar e executar o aplicativo pressionando CTRL + F5.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 sequência retornada com base em qualquer campo disponível.

Para solicitar os resultados

  1. Adicione o seguinte Order By cláusula entre o Where demonstrativo e o Select demonstrativo da consulta. The Order By cláusula irá solicitar os resultados em ordem alfabética A a Z, de acordo com como o último nome de cada aluno.

    Order By currentStudent.Last Ascending _
    
  2. Para solicitar 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. Criar e executar o aplicativo pressionando CTRL + F5.Observe os resultados na janela do console.

Apresentar um identificador de local

  1. Adicione o código desta seção 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 do aluno e do sobrenome. Um identificador de local pode ser usado para sua conveniência, ou ele pode melhorar o desempenho, armazenando os resultados de uma expressão que contrário poderia ser calculado 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. Criar e executar o aplicativo pressionando CTRL + F5.Observe os resultados na janela do console.

Projeto um campo na cláusula selecionar

  1. Adicionar a consulta e For Each loop desta seção para criar uma consulta que produz uma sequência cujos elementos diferem dos elementos na fonte. No exemplo a seguir, a fonte é uma coleção de Student objetos, mas somente um membro de cada objeto é retornado: o nome do que os alunos cujo sobrenome seja Garcia.Porque currentStudent.First é uma sequência de caracteres, o tipo de dados da sequência retornada por studentQuery3 é IEnumerable(Of String), uma sequência de cadeias de caracteres. sistema autônomo nos exemplos anteriores, a atribuição de um tipo de dados para studentQuery3 é da esquerda para o compilador determinar por meio de inferência de tipos 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 sobre studentQuery3 em seu código para verificar se o tipo de atribuído IEnumerable(Of String).

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

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

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

    O exemplo a seguir cria uma consulta que retorna o nome e a ordem de seniores cuja posição acadêmica está entre 1 e 10 na ordem de classificar acadêmica.Neste exemplo, o tipo de studentQuery4 deve possível inferir com porque o Select cláusula retorna uma instância de um tipo anônimo, e um tipo anônimo não tem nenhum 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. Criar e executar o aplicativo pressionando CTRL + F5.Observe os resultados na janela do console.

Exemplos adicionais

Agora que você entenda os fundamentos, a seguir é uma lista de exemplos adicionais para ilustrar a flexibilidade e poder 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 Faça um 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

Consultas de exemplo (Visual Basic)

Conceitos

Recursos suplementares do LINQ

Inferência de tipos local

Inicializadores de objeto: Tipos nomeados e anônimos

Tipos anônimos

Introdução ao LINQ no Visual Basic

Outros recursos

LINQ (consulta integrada à linguagem)

Introdução ao LINQ no Visual Basic

LINQ no Visual Basic

Consultas(Visual Basic)