Delen via


Basisquerybewerkingen (Visual Basic)

Dit onderwerp bevat een korte inleiding tot LINQ-expressies (Language-Integrated Query) in Visual Basic en enkele van de typische soorten bewerkingen die u in een query uitvoert. Zie de volgende onderwerpen voor meer informatie:

Inleiding tot LINQ in Visual Basic

Query's

Overzicht: Query's schrijven in Visual Basic

De gegevensbron opgeven (van)

In een LINQ-query moet u eerst de gegevensbron opgeven die u wilt opvragen. Daarom komt de From component in een query altijd als eerste. Queryoperators selecteren en vormgeven het resultaat op basis van het type bron.

Dim query = From cust In customers
'           ...

De From component geeft de gegevensbron en customerseen bereikvariabele op. cust De bereikvariabele lijkt op een lusiteratievariabele, behalve dat er in een query-expressie geen werkelijke iteratie plaatsvindt. Wanneer de query wordt uitgevoerd, vaak met behulp van een For Each lus, dient de bereikvariabele als verwijzing naar elk opeenvolgend element in customers. Omdat de compiler het type custkan afleiden, hoeft u deze niet expliciet op te geven. Zie Typerelaties in Query Operations (Visual Basic) voor voorbeelden van query's die met en zonder expliciet typen zijn geschreven.

Zie From-component voor meer informatie over het gebruik van de From component in Visual Basic.

Gegevens filteren (waar)

Waarschijnlijk is de meest voorkomende querybewerking het toepassen van een filter in de vorm van een Boole-expressie. De query retourneert vervolgens alleen de elementen waarvoor de expressie waar is. Er wordt een Where component gebruikt om het filteren uit te voeren. Het filter geeft aan welke elementen in de gegevensbron moeten worden opgenomen in de resulterende reeks. In het volgende voorbeeld worden alleen klanten opgenomen die een adres in Londen hebben.

Dim londonCusts = From cust In customers
                  Where cust.City = "London"
'                 ...

U kunt logische operatoren gebruiken, zoals And en Or om filterexpressies in een Where component te combineren. Als u bijvoorbeeld alleen klanten wilt retourneren die afkomstig zijn uit Londen en waarvan de naam Devon is, gebruikt u de volgende code:

Where cust.City = "London" And cust.Name = "Devon"

Als u klanten wilt retourneren uit Londen of Parijs, gebruikt u de volgende code:

Where cust.City = "London" Or cust.City = "Paris"

Zie Where-component voor meer informatie over het gebruik van de Where component in Visual Basic.

Gegevens bestellen (bestellen op)

Het is vaak handig om geretourneerde gegevens in een bepaalde volgorde te sorteren. De Order By component zorgt ervoor dat de elementen in de geretourneerde reeks worden gesorteerd op een opgegeven veld of velden. Met de volgende query worden de resultaten bijvoorbeeld gesorteerd op basis van de Name eigenschap. Omdat Name dit een tekenreeks is, worden de geretourneerde gegevens alfabetisch gesorteerd, van A naar Z.

Dim londonCusts1 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
'                   ...

Als u de resultaten in omgekeerde volgorde wilt rangschikken, gebruikt u de Order By...Descending component van Z naar A. De standaardwaarde is Ascending wanneer noch Ascending noch Descending is opgegeven.

Zie Order By-component voor meer informatie over het gebruik van de Order By component in Visual Basic.

Gegevens selecteren (selecteren)

De Select component geeft het formulier en de inhoud van geretourneerde elementen op. U kunt bijvoorbeeld opgeven of uw resultaten bestaan uit volledige Customer objecten, slechts één Customer eigenschap, een subset eigenschappen, een combinatie van eigenschappen uit verschillende gegevensbronnen of een nieuw resultaattype op basis van een berekening. Wanneer de Select component iets anders produceert dan een kopie van het bronelement, wordt de bewerking een projectie genoemd.

Als u een verzameling wilt ophalen die uit volledige Customer objecten bestaat, selecteert u de bereikvariabele zelf:

Dim londonCusts2 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust

Als een Customer exemplaar een groot object is dat veel velden bevat en alles wat u wilt ophalen de naam is, kunt cust.Nameu selecteren, zoals wordt weergegeven in het volgende voorbeeld. Lokale typedeductie herkent dat dit het resultaattype wijzigt van een verzameling objecten in een verzameling Customer tekenreeksen.

Dim londonCusts3 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust.Name

Als u meerdere velden in de gegevensbron wilt selecteren, hebt u twee opties:

  • Geef in de Select component de velden op die u wilt opnemen in het resultaat. De compiler definieert een anoniem type met deze velden als eigenschappen. Zie Anonieme typen voor meer informatie.

    Omdat de geretourneerde elementen in het volgende voorbeeld exemplaren van een anoniem type zijn, kunt u niet verwijzen naar het type op naam elders in uw code. De door de compiler aangewezen naam voor het type bevat tekens die niet geldig zijn in normale Visual Basic-code. In het volgende voorbeeld zijn de elementen in de verzameling die door de query londonCusts4 worden geretourneerd, exemplaren van een anoniem type

    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
    

    – of –

  • Definieer een benoemd type dat de specifieke velden bevat die u wilt opnemen in het resultaat en maak en initialiseer exemplaren van het type in de Select component. Gebruik deze optie alleen als u afzonderlijke resultaten buiten de verzameling waarin ze worden geretourneerd, moet gebruiken of als u ze moet doorgeven als parameters in methode-aanroepen. Het type in londonCusts5 het volgende voorbeeld is IEnumerable(Of Name Telefoon).

    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}
    

Zie Select Clause voor meer informatie over het gebruik van de Select component in Visual Basic.

Deelnemen aan gegevens (deelnemen aan groepen en deelnemen aan groepen)

U kunt meer dan één gegevensbron op verschillende manieren combineren in de From component. De volgende code maakt bijvoorbeeld gebruik van twee gegevensbronnen en combineert impliciet eigenschappen uit beide gegevensbronnen in het resultaat. De query selecteert leerlingen/studenten waarvan de achternamen beginnen met een klinker.

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

Notitie

U kunt deze code uitvoeren met de lijst met leerlingen/studenten die zijn gemaakt in Procedure: Een lijst met items maken.

Het Join trefwoord is gelijk aan een INNER JOIN in SQL. Er worden twee verzamelingen gecombineerd op basis van overeenkomende sleutelwaarden tussen elementen in de twee verzamelingen. De query retourneert alle of een deel van de verzamelingselementen met overeenkomende sleutelwaarden. Met de volgende code wordt bijvoorbeeld de actie van de vorige impliciete join gedupliceerd.

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 Join combineert verzamelingen in één hiërarchische verzameling, net als een LEFT JOIN in SQL. Zie Join-component en Group Join Clause voor meer informatie.

Gegevens groeperen (groeperen op)

U kunt een Group By component toevoegen om de elementen in een queryresultaat te groeperen op basis van een of meer velden van de elementen. De volgende code groeperen bijvoorbeeld leerlingen/studenten per klasjaar.

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

Als u deze code uitvoert met behulp van de lijst met leerlingen/studenten die zijn gemaakt in Procedure: Een lijst met items maken, is de uitvoer van de For Each instructie:

Jaar: Junior

Tucker, Michael

Garcia, Hugo

Garcia, Debra

Tucker, Lance

Jaar: Senior

Omelchenko, Svetlana

Osada, Michiko

Fakhouri, Fadi

Feng, Hanying

Adams, Terry

Jaar: Eerstejaars

Mortensen, Sven

Garcia, Caesar

Met de variatie die in de volgende code wordt weergegeven, worden de klasjaren gesorteerd en worden de studenten binnen elk jaar op achternaam gerangschikt.

Dim studentsByYear2 = From student In students
                      Select student
                      Order By student.Year, student.Last
                      Group By year = student.Year
                      Into Classes = Group

Zie Group By-component voor meer informatie.Group By

Zie ook