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 overzicht ziet u hoe u Visual Basic-taalfuncties kunt gebruiken om Language-Integrated Query-expressies (LINQ) te schrijven. In het overzicht ziet u hoe u query's maakt in een lijst met studentobjecten, hoe u de query's uitvoert en hoe u deze kunt wijzigen. De query's bevatten verschillende functies, waaronder object-initialisatiefuncties, deductie van het lokale type en anonieme typen.
Nadat u deze procedure hebt voltooid, bent u klaar om verder te gaan met de voorbeelden en documentatie voor de specifieke LINQ-provider waarin u geïnteresseerd bent. LINQ-providers omvatten LINQ naar SQL, LINQ naar DataSet en LINQ naar XML.
Een project maken
Een consoletoepassingsproject maken
Start Visual Studio.
Wijs in het menu Bestand naar Nieuw en klik vervolgens op Project.
Klik in de lijst Geïnstalleerde sjablonen op Visual Basic.
Klik in de lijst met projecttypen op Consoletoepassing. Typ een naam voor het project in het vak Naam en klik op OK.
Er wordt een project gemaakt. Deze bevat standaard een verwijzing naar System.Core.dll. De lijst met geïmporteerde naamruimten op de referentiepagina bevat Project Designer (Visual Basic) ook de System.Linq naamruimte.
Zorg ervoor dat op de Compile-pagina van Project Designer (Visual Basic)Optie infer is ingesteld op Aan.
Een In-Memory-gegevensbron toevoegen
De gegevensbron voor de query's in dit scenario is een lijst Student met objecten. Elk Student object bevat een voornaam, een achternaam, een studiejaar, en een academische rang in de studentenpopulatie.
De gegevensbron toevoegen
Definieer een
Studentklasse en maak een lijst met exemplaren van de klasse.Belangrijk
De code die nodig is om de
Studentklasse te definiëren en de lijst te maken die wordt gebruikt in de overzichtsvoorbeelden, vindt u in Procedure: Een lijst met items maken. U kunt het van daaruit kopiëren en in uw project plakken. De nieuwe code vervangt de code die werd weergegeven toen u het project maakte.
Een nieuwe leerling/student toevoegen aan de lijst met leerlingen/studenten
- Volg het patroon in de
getStudentsmethode om een ander exemplaar van deStudentklasse toe te voegen aan de lijst. Als u de student toevoegt, maakt u kennis met object-initializers. Zie Object initializers: Named and Anonymous Types voor meer informatie.
Een query maken
Wanneer deze wordt uitgevoerd, produceert de query die in deze sectie is toegevoegd een lijst met de studenten waarvan de academische rang ze in de top tien plaatst. Omdat de query telkens het volledige Student object selecteert, is IEnumerable(Of Student)het type van het queryresultaat. Het type van de query wordt doorgaans echter niet opgegeven in querydefinities. In plaats daarvan gebruikt de compiler deductie van het lokale type om het type te bepalen. Zie Inferentie van lokaal type voor meer informatie. De bereikvariabele van de query, currentStudentfungeert als een verwijzing naar elk Student exemplaar in de bron, studentswaarmee toegang wordt geboden tot de eigenschappen van elk object in students.
Een eenvoudige query maken
Zoek de plaats in de
Mainmethode van het project die als volgt is gemarkeerd:' ****Paste query and query execution code from the walkthrough, ' ****or any code of your own, here in Main.Kopieer de volgende code en plak deze in.
Dim studentQuery = From currentStudent In students Where currentStudent.Rank <= 10 Select currentStudentBeweeg de muisaanwijzer over
studentQueryin uw code om te controleren of het door de compiler toegewezen typeIEnumerable(Of Student)is.
De query uitvoeren
De variabele studentQuery bevat de definitie van de query, niet de resultaten van het uitvoeren van de query. Een typisch mechanisme voor het uitvoeren van een query is een For Each lus. Elk element in de geretourneerde reeks wordt aangesproken via de lusvariabele. Zie Uw eerste LINQ-query schrijven voor meer informatie over het uitvoeren van query's.
De query uitvoeren
Voeg de volgende
For Eachlus toe onder de query in uw project.For Each studentRecord In studentQuery Console.WriteLine(studentRecord.Last & ", " & studentRecord.First) NextPlaats de muiswijzer op de lusbesturingsvariabele
studentRecordom het gegevenstype ervan te zien. Het typestudentRecordwordt afgeleid alsStudent, omdatstudentQueryeen verzameling vanStudent-exemplaren retourneert.Bouw de toepassing en voer deze uit door op Ctrl+F5 te drukken. Noteer de resultaten in het consolevenster.
De query wijzigen
Het is eenvoudiger om queryresultaten te scannen als ze zich in een opgegeven volgorde bevinden. U kunt de geretourneerde volgorde sorteren op basis van elk beschikbaar veld.
De resultaten ordenen
Voeg de volgende
Order Bycomponent toe tussen deWhereinstructie en deSelectinstructie van de query. DeOrder Bycomponent rangschikt de resultaten alfabetisch van A tot Z, volgens de achternaam van elke student.Order By currentStudent.Last AscendingAls u wilt orden op achternaam en vervolgens op voornaam, voegt u beide velden toe aan de query:
Order By currentStudent.Last Ascending, currentStudent.First AscendingU kunt ook opgeven
Descendingom van Z naar A te bestellen.Bouw de toepassing en voer deze uit door op Ctrl+F5 te drukken. Noteer de resultaten in het consolevenster.
Een lokale id introduceren
Voeg de code in deze sectie toe om een lokale id in de query-expressie te introduceren. De lokale identificator zal een tussenliggend resultaat bevatten. In het volgende voorbeeld
nameis een id die een samenvoeging van de voor- en achternamen van de leerling/student bevat. Een lokale id kan voor het gemak worden gebruikt of de prestaties verbeteren door de resultaten van een expressie op te slaan die anders meerdere keren zou worden berekend.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) NextBouw de toepassing en voer deze uit door op Ctrl+F5 te drukken. Noteer de resultaten in het consolevenster.
Eén veld weergeven in de SELECT-clausule
Voeg de query en
For Eachlus uit deze sectie toe om een query te maken die een reeks produceert waarvan de elementen verschillen van de elementen in de bron. In het volgende voorbeeld is de bron een verzamelingStudentobjecten, maar slechts één lid van elk object wordt geretourneerd: de voornaam van studenten waarvan de achternaam Garcia is. OmdatcurrentStudent.Firsteen tekenreeks is, is het gegevenstype van de reeks die doorstudentQuery3wordt geretourneerdIEnumerable(Of String), een reeks tekenreeksen. Net als in eerdere voorbeelden wordt de toewijzing van een gegevenstypestudentQuery3voor de compiler overgelaten om te bepalen met behulp van lokale typedeductie.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) NextHoud de muis-aanwijzer boven
studentQuery3in uw code om te controleren of het toegewezen typeIEnumerable(Of String)is.Bouw de toepassing en voer deze uit door op Ctrl+F5 te drukken. Noteer de resultaten in het consolevenster.
Een anoniem type maken in een select-clausule
Voeg de code uit deze sectie toe om te zien hoe anonieme typen worden gebruikt in query's. U gebruikt deze in query's wanneer u meerdere velden uit de gegevensbron wilt retourneren in plaats van volledige records (
currentStudentrecords in eerdere voorbeelden) of enkele velden (Firstin de vorige sectie). In plaats van een nieuw benoemd type te definiëren dat de velden bevat die u wilt opnemen in het resultaat, geeft u de velden in deSelectcomponent op en maakt de compiler een anoniem type met deze velden als eigenschappen. Zie Anonieme typen voor meer informatie.In het volgende voorbeeld wordt een query gemaakt die de naam en rang van senioren retourneert waarvan de academische rang tussen 1 en 10 ligt, in volgorde van academische rang. In dit voorbeeld moet het type
studentQuery4worden afgeleid omdat deSelectcomponent een exemplaar van een anoniem type retourneert en een anoniem type geen bruikbare naam heeft.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) NextBouw de toepassing en voer deze uit door op Ctrl+F5 te drukken. Noteer de resultaten in het consolevenster.
Aanvullende voorbeelden
Nu u de basisbeginselen begrijpt, ziet u hieronder een lijst met aanvullende voorbeelden om de flexibiliteit en kracht van LINQ-query's te illustreren. Elk voorbeeld wordt voorafgegaan door een korte beschrijving van wat het doet. Plaats de muisaanwijzer op de variabele van het queryresultaat voor elke query om het afgeleide type weer te geven. Gebruik een For Each lus om de resultaten te produceren.
' 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
Aanvullende informatie
Nadat u bekend bent met de basisconcepten van het werken met query's, kunt u de documentatie en voorbeelden lezen voor het specifieke type LINQ-provider waarin u geïnteresseerd bent: