Operações básicas de consulta (Visual Basic)
Este tópico fornece uma breve introdução a LINQ (consulta integrada à linguagem) expressões em Visual Basic e alguns dos tipos típicos de operações executadas em uma consulta. Para obter mais informações, consulte os seguintes tópicos:
Introdução ao LINQ no Visual Basic
Especificando a fonte de dados (de)
Em um LINQ a consulta, a primeira etapa é especificar a fonte de dados que deseja fazer a consulta. Portanto, o cláusula deFrom em uma consulta sempre vem em primeiro lugar. Operadores de consulta Selecionar e a forma do resultado com base no tipo de origem.
Dim query = From cust In customers
' ...
O From cláusula Especifica a fonte de dados, customerse um a variável de intervalo, cust. A variável de intervalo é como uma variável de iteração do loop, exceto em uma expressão de consulta, nenhuma interação real ocorre. Quando a consulta é executada, geralmente usando um For Each a variável de intervalo de loop, serve como uma referência para cada elemento sucessivo customers. Porque o compilador pode inferir o tipo de cust, você não precisará especificá-la explicitamente. Para obter exemplos de consultas escritas com e sem digitação explícita, consulte Relações de tipo em operações de consulta (Visual Basic).
Para obter mais informações sobre como usar o From cláusula Visual Basic, consulte A partir da cláusula (Visual Basic).
Filtragem de dados (onde)
Provavelmente, a operação de consulta mais comuns é aplicando um filtro na forma de uma expressão booleana. A consulta retorna apenas aqueles elementos para os quais a expressão for verdadeira. A Where cláusula é usada para executar a filtragem. O filtro especifica quais elementos da fonte de dados para incluir na seqüência resultante. No exemplo a seguir, os clientes que possuem um endereço em Londres estão incluídos.
Dim londonCusts = From cust In customers
Where cust.City = "London"
' ...
Você pode usar os operadores lógicos, como And e Or para combinar expressões de filtro em um Where cláusula. Por exemplo, para retornar somente os clientes que são de Londres e cujo nome é Juliana Paes, use o seguinte código:
Where cust.City = "London" And cust.Name = "Devon"
Para retornar a clientes de Londres ou Paris, use o seguinte código:
Where cust.City = "London" Or cust.City = "Paris"
Para obter mais informações sobre como usar o Where cláusula Visual Basic, consulte Clúasula Where (Visual Basic).
Ordenação de dados (Order By)
Muitas vezes é conveniente classificar os dados retornados em uma ordem específica. O Order By cláusula fará com que os elementos na seqüência retornado seja classificada em um campo especificado ou campos. Por exemplo, a consulta a seguir classifica os resultados com base na Name propriedade. Porque Name é uma seqüência, os dados retornados serão classificados em ordem alfabética, de à z
Dim londonCusts1 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
' ...
Para ordenar os resultados em ordem inversa de z a, use o Order By...Descending cláusula. O padrão é Ascending quando nenhuma Ascending nem Descending é especificado.
Para obter mais informações sobre como usar o Order By cláusula Visual Basic, consulte Cláusula Order By (Visual Basic).
Selecionando dados (Select)
O Select cláusula Especifica a forma e o conteúdo dos elementos retornados. Por exemplo, você pode especificar se os resultados consistirá completa Customer objetos, apenas um Customer propriedade, um subconjunto das propriedades, uma combinação das propriedades de várias fontes de dados, ou algum tipo de resultado de novo com base em um cálculo. Quando o Select cláusula produz algo diferente de uma cópia do elemento de origem, a operação é chamada um projeção.
Para recuperar uma coleção que consiste em completa Customer objetos, selecione a variável de intervalo:
Dim londonCusts2 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust
Se um Customer instância é um objeto grande, que possui muitos campos e tudo o que você deseja recuperar é o nome, você pode selecionar cust.Name, conforme mostrado no exemplo a seguir. Inferência de tipo local reconhece que isso altera o tipo de resultado de uma coleção de Customer objetos a uma coleção de seqüências de caracteres.
Dim londonCusts3 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust.Name
Para selecionar vários campos da fonte de dados, você tem duas opções:
No Select cláusula, especifique os campos que você deseja incluir no resultado. O compilador irá definir um tipo anônimo que tenha esses campos como suas propriedades. Para obter mais informações, consulte Tipos anônimos (Visual Basic).
Como os elementos retornados no exemplo a seguir são instâncias de um tipo anônimo, você não pode referir ao tipo por nome em outro lugar no seu código. O nome designado pelo compilador para o tipo contém caracteres que não são válidos em código de Visual Basic normal. No exemplo a seguir, os elementos na coleção que é retornado pela consulta no londonCusts4 são instâncias de um tipo anônimo
Dim londonCusts4 = From cust In customers Where cust.City = "London" Order By cust.Name Ascending Select Name = cust.Name, Phone = cust.Phone For Each londonCust In londonCusts4 Console.WriteLine(londonCust.Name & " " & londonCust.Phone) Next
- ou -
Definir um tipo nomeado que contém os campos específicos que você deseja incluir no resultado e criar e inicializar instâncias do tipo de Select cláusula. Use esta opção somente se você tem que usar os resultados individuais fora da coleção na qual são retornados ou se você tiver passá-los como parâmetros em chamadas de método. O tipo de londonCusts5 no exemplo a seguir é IEnumerable(Of NamePhone).
Public Class NamePhone Public Name As String Public Phone As String ' Additional class elements End Class
Dim londonCusts5 = From cust In customers Where cust.City = "London" Order By cust.Name Ascending Select New NamePhone With {.Name = cust.Name, .Phone = cust.Phone}
Para obter mais informações sobre como usar o Select cláusula Visual Basic, consulte Cláusula Select (Visual Basic).
Ligação de dados (associação e associação de grupo)
Você pode combinar mais de uma fonte de dados do From cláusula de várias maneiras. Por exemplo, o código a seguir usa duas fontes de dados e implicitamente combina propriedades ambos no resultado. A consulta seleciona os alunos cujos sobrenomes começam com uma vogal.
Dim vowels() As String = {"A", "E", "I", "O", "U"}
Dim vowelNames = From student In students, vowel In vowels
Where student.Last.IndexOf(vowel) = 0
Select Name = student.First & " " &
student.Last, Initial = vowel
Order By Initial
For Each vName In vowelNames
Console.WriteLine(vName.Initial & ": " & vName.Name)
Next
Observação |
---|
Você pode executar esse código com a lista dos alunos, criado em Como: Criar uma lista de itens. |
O Join palavra-chave é equivalente a uma INNER JOIN SQL. Ele combina duas coleções com base em valores de chave de correspondência entre os elementos em duas coleções. A consulta retorna todo ou parte dos elementos de coleção que têm valores de chaves correspondentes. Por exemplo, o código a seguir duplica a ação da associação implícita anterior.
Dim vowelNames2 = From student In students
Join vowel In vowels
On student.Last(0) Equals vowel
Select Name = student.First & " " &
student.Last, Initial = vowel
Order By Initial
Group Joincombina os conjuntos em uma única coleção hierárquica, exatamente como um LEFT JOIN SQL. Para obter mais informações, consulte Cláusula de adição (Visual Basic) e Cláusula Join Group (Visual Basic).
Dados de agrupamento (grupo por)
Você pode adicionar um Group By cláusula agrupar os elementos em um resultado de consulta de acordo com um ou mais campos de elementos. Por exemplo, o código a seguir agrupa os alunos por ano de classe.
Dim studentsByYear = From student In students
Select student
Group By year = student.Year
Into Classes = Group
For Each yearGroup In studentsByYear
Console.WriteLine(vbCrLf & "Year: " & yearGroup.year)
For Each student In yearGroup.Classes
Console.WriteLine(" " & student.Last & ", " & student.First)
Next
Next
Se você executar esse código usando a lista dos alunos, criado em Como: Criar uma lista de itens, a saída da For Each instrução é:
Ano: Júnior
Tucker, Michael
Garcia, Hugo
Garcia, Suzana
Tucker, Lance
Ano: Sênior
Omelchenko, Svetlana
Osada, Michiko
Fakhouri, Fadi
Feng, Hanying
Adams, Terry
Ano: Freshman
Mortensen, Sven
Garcia, Cesar
A variação mostrada no código a seguir Ordena os anos de classe e ordena os alunos dentro de cada ano pelo sobrenome.
Dim studentsByYear2 = From student In students
Select student
Order By student.Year, student.Last
Group By year = student.Year
Into Classes = Group
Para obter mais informações sobre o Group By, consulte Cláusula Group By (Visual Basic).
Consulte também
Referência
Conceitos
Visão geral operadores de consulta padrão
Operações básicas de consulta do LINQ (C#)