gebeurtenis
17 mrt, 21 - 21 mrt, 10
Neem deel aan de meetup-serie om schaalbare AI-oplossingen te bouwen op basis van praktijkgebruiksvoorbeelden met collega-ontwikkelaars en experts.
Nu registrerenDeze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
In dit scenario ziet u hoe u Visual Basic-taalfuncties kunt gebruiken om LINQ-queryexpressies (Language-Integrated Query) 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.
Start Visual Studio.
Wijs in het menu Bestand de optie Nieuw aan en klik 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.
Controleerop de pagina Compileren of Project Designer (Visual Basic) is ingesteld op Aan.
De gegevensbron voor de query's in dit scenario is een lijst Student
met objecten. Elk Student
object bevat een voornaam, een achternaam, een klasjaar en een academische rang in de hoofdtekst van de student.
Definieer een Student
klasse en maak een lijst met exemplaren van de klasse.
Belangrijk
De code die nodig is om de Student
klasse 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.
getStudents
methode om een ander exemplaar van de Student
klasse 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.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 Deductie van lokaal type voor meer informatie. De bereikvariabele van de query, currentStudent
fungeert als een verwijzing naar elk Student
exemplaar in de bron, students
waarmee toegang wordt geboden tot de eigenschappen van elk object in students
.
Zoek de plaats in de Main
methode 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 currentStudent
Plaats de muis aanwijzer studentQuery
in uw code om te controleren of het door de compiler toegewezen type is IEnumerable(Of Student)
.
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 geopend via de herhalingsvariabele van de lus. Zie Uw eerste LINQ-query schrijven voor meer informatie over het uitvoeren van query's.
Voeg de volgende For Each
lus toe onder de query in uw project.
For Each studentRecord In studentQuery
Console.WriteLine(studentRecord.Last & ", " & studentRecord.First)
Next
Plaats de muiswijzer op de lusbesturingsvariabele studentRecord
om het gegevenstype ervan te zien. Het type studentRecord
wordt afgeleid, Student
omdat studentQuery
een verzameling Student
exemplaren wordt geretourneerd.
Bouw de toepassing en voer deze uit door op Ctrl+F5 te drukken. Noteer de resultaten in het consolevenster.
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.
Voeg de volgende Order By
component toe tussen de Where
instructie en de Select
instructie van de query. De Order By
component rangschikt de resultaten alfabetisch van A tot Z, volgens de achternaam van elke student.
Order By currentStudent.Last Ascending
Als u wilt orden op achternaam en vervolgens op voornaam, voegt u beide velden toe aan de query:
Order By currentStudent.Last Ascending, currentStudent.First Ascending
U kunt ook opgeven Descending
om 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.
Voeg de code in deze sectie toe om een lokale id in de query-expressie te introduceren. De lokale id bevat een tussenliggend resultaat. In het volgende voorbeeld name
is 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)
Next
Bouw de toepassing en voer deze uit door op Ctrl+F5 te drukken. Noteer de resultaten in het consolevenster.
Voeg de query en For Each
lus 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 verzameling Student
objecten, maar slechts één lid van elk object wordt geretourneerd: de voornaam van studenten waarvan de achternaam Garcia is. Omdat currentStudent.First
dit een tekenreeks is, is IEnumerable(Of String)
het gegevenstype van de reeks die wordt studentQuery3
geretourneerd, een reeks tekenreeksen. Net als in eerdere voorbeelden wordt de toewijzing van een gegevenstype studentQuery3
voor 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)
Next
Plaats de muis aanwijzer studentQuery3
in uw code om te controleren of het toegewezen type is IEnumerable(Of String)
.
Bouw de toepassing en voer deze uit door op Ctrl+F5 te drukken. Noteer de resultaten in het consolevenster.
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 (currentStudent
records in eerdere voorbeelden) of enkele velden (First
in 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 de Select
component 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 studentQuery4
worden afgeleid omdat de Select
component 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)
Next
Bouw de toepassing en voer deze uit door op Ctrl+F5 te drukken. Noteer de resultaten in het consolevenster.
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 muiswijzer op de queryresultaatvariabele voor elke query om het uitgestelde 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
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:
.NET-feedback
.NET is een open source project. Selecteer een koppeling om feedback te geven:
gebeurtenis
17 mrt, 21 - 21 mrt, 10
Neem deel aan de meetup-serie om schaalbare AI-oplossingen te bouwen op basis van praktijkgebruiksvoorbeelden met collega-ontwikkelaars en experts.
Nu registrerenTraining
Module
Work with queries in Dynamics 365 Business Central - Training
Learn how to work with the Query object in Dynamics 365 Business Central to join, filter, and aggregate data.
Certificering
Microsoft-gecertificeerd: Azure Cosmos DB-ontwikkelaarsspecialisatie - Certifications
Schrijf efficiënte query's, maak indexeringsbeleid, beheer en inrichting van resources in de SQL-API en SDK met Microsoft Azure Cosmos DB.
Documentatie
Basisquerybewerkingen - Visual Basic
Meer informatie over: Basic Query Operations (Visual Basic)
Where-component - Visual Basic
Meer informatie over: Where-component (Visual Basic)
Meer informatie over: Query's (Visual Basic)