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
Inicie o Visual Studio 2008
On the Arquivo menu, clicar Novo projeto.
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
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
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
Adicione o seguinte For Each loop abaixo a consulta no seu projeto.
For Each studentRecord In studentQuery Console.WriteLine(studentRecord.Last & ", " & studentRecord.First) Next
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.
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
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 _
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.
Criar e executar o aplicativo pressionando CTRL + F5.Observe os resultados na janela do console.
Apresentar um identificador de local
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
Criar e executar o aplicativo pressionando CTRL + F5.Observe os resultados na janela do console.
Projeto um campo na cláusula selecionar
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
Posicione o ponteiro do mouse sobre studentQuery3 em seu código para verificar se o tipo de atribuído IEnumerable(Of String).
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
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
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:
Consulte também
Tarefas
Consultas de exemplo (Visual Basic)
Conceitos
Recursos suplementares do LINQ
Inicializadores de objeto: Tipos nomeados e anônimos
Introdução ao LINQ no Visual Basic
Outros recursos
LINQ (consulta integrada à linguagem)