Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit onderwerp vindt u een korte inleiding tot Language-Integrated QUERY-expressies (LINQ) 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
Handleiding: Query's schrijven in Visual Basic
De gegevensbron (van) specificeren
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 is vergelijkbaar met een loopvariabele, behalve dat er in een query-expressie geen daadwerkelijke 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 voor meer informatie over het gebruik van de 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 voor meer informatie over het gebruik van de component in Visual Basic.
Gegevens ordenen (sorteren 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 voor meer informatie over het gebruik van de component in Visual Basic.
Gegevens selecteren (Selectie)
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 als u alleen de naam wilt ophalen, kunt u cust.Name 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
Selectcomponent 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
londonCusts4worden geretourneerd, exemplaren van een anoniem typeDim 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
Selectcomponent. 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 vanlondonCusts5in het volgende voorbeeld is IEnumerable(Of NamePhone).Public Class NamePhone Public Name As String Public Phone As String ' Additional class elements End ClassDim 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 voor meer informatie over het gebruik van de component in Visual Basic.
Gegevens samenvoegen (Join en Group Join)
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
Opmerking
U kunt deze code uitvoeren met de lijst met studenten die is 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 Clause 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 studenten die gemaakt is 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
Voor meer informatie over Group By, zie Group By-clausule.
Zie ook
- IEnumerable<T>
- Aan de slag met LINQ in Visual Basic
- Opvragen
- Visual Basic: Overzicht van standaardquery-operators
- LINQ