Delen via


Procedure: Een query uitvoeren op een matrixlijst met LINQ (Visual Basic)

Wanneer u LINQ gebruikt om query's uit te voeren op niet-algemene IEnumerable verzamelingen, zoals ArrayList, moet u expliciet het type van de bereikvariabele declareren om het specifieke type van de objecten in de verzameling weer te geven. Als u bijvoorbeeld een ArrayList object Student hebt, moet uw From-component er als volgt uitzien:

Dim query = From student As Student In arrList
'...

Door het type bereikvariabele op te geven, werpt u elk item in het ArrayList naar een Student.

Het gebruik van een expliciet getypte bereikvariabele in een query-expressie komt overeen met het aanroepen van de Cast methode. Cast genereert een uitzondering als de opgegeven cast niet kan worden uitgevoerd. Cast en OfType zijn de twee standaardqueryoperatormethoden die werken op niet-algemene IEnumerable typen. In Visual Basic moet u de methode in de Cast gegevensbron expliciet aanroepen om een specifiek bereikvariabeletype te garanderen. Zie Typerelaties in Query-bewerkingen (Visual Basic) voor meer informatie.

Opmerking

In het volgende voorbeeld ziet u een eenvoudige query boven een ArrayList. In dit voorbeeld worden object-initialisatiefuncties gebruikt wanneer de code de Add methode aanroept, maar dit is geen vereiste.

Imports System.Collections
Imports System.Linq

Module Module1

    Public Class Student
        Public Property FirstName As String
        Public Property LastName As String
        Public Property Scores As Integer()
    End Class

    Sub Main()

        Dim student1 As New Student With {.FirstName = "Svetlana",
                                     .LastName = "Omelchenko",
                                     .Scores = New Integer() {98, 92, 81, 60}}
        Dim student2 As New Student With {.FirstName = "Claire",
                                    .LastName = "O'Donnell",
                                    .Scores = New Integer() {75, 84, 91, 39}}
        Dim student3 As New Student With {.FirstName = "Cesar",
                                    .LastName = "Garcia",
                                    .Scores = New Integer() {97, 89, 85, 82}}
        Dim student4 As New Student With {.FirstName = "Sven",
                                    .LastName = "Mortensen",
                                    .Scores = New Integer() {88, 94, 65, 91}}

        Dim arrList As New ArrayList()
        arrList.Add(student1)
        arrList.Add(student2)
        arrList.Add(student3)
        arrList.Add(student4)

        ' Use an explicit type for non-generic collections
        Dim query = From student As Student In arrList
                    Where student.Scores(0) > 95
                    Select student

        For Each student As Student In query
            Console.WriteLine(student.LastName & ": " & student.Scores(0))
        Next
        ' Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.")
        Console.ReadKey()
    End Sub

End Module
' Output:
'   Omelchenko: 98
'   Garcia: 97

Zie ook