Instruções passo a passo: escrevendo 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
Inicie o Visual Studio.
No menu File, aponte para New, e em seguida, clique em Project.
Na lista de Modelos Instalados , clique Visual Basic.
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 Página Referências, Designer de Projeto (Visual Basic) inclui o namespace System.Linq.
Em Página de Compilação, Designer de Projeto (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.
Importante
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
- Segue o padrão no método de getStudents para adicionar outra instância da classe de Student à lista. Adicione o introduzi-lo-á aluno inicializadores de objeto. Para obter mais informações, consulte Inicializadores de objeto: tipos nomeados e anônimos (Visual Basic).
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 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
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
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 Escrevendo a primeira consulta LINQ (Visual Basic).
Para executar a consulta
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
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 .
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
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
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.
Compilar e executar o aplicativo pressionando CTRL + f5. Observe os resultados na janela do console.
Para criar um identificador local
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
Compilar e executar o aplicativo pressionando CTRL + f5. Observe os resultados na janela do console.
Para projetar um campo na cláusula select
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
Posicione o ponteiro do mouse em studentQuery3 em seu código para verificar que o tipo atribuído seja IEnumerable(Of String).
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
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
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:
Consulte também
Tarefas
Instruções passo a passo: escrevendo consultas em C# (LINQ)
Conceitos
Inferência de tipo local (Visual Basic)
Inicializadores de objeto: tipos nomeados e anônimos (Visual Basic)
Introdução a LINQ no Visual Basic
Outros recursos
LINQ (Consulta Integrada à Linguagem)