Freigeben über


Vorgehensweise: Abfragen einer ArrayList mit LINQ (Visual Basic)

Wenn Sie LINQ verwenden, um nicht generische IEnumerable Auflistungen abzufragen, z ArrayList. B. müssen Sie den Typ der Bereichsvariable explizit deklarieren, um den spezifischen Typ der Objekte in der Auflistung widerzuspiegeln. Wenn Sie beispielsweise ein ArrayList von Student Objekten haben, sollte Ihre From-Klausel wie folgt aussehen:

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

Indem Sie den Typ der Bereichsvariablen angeben, wandeln Sie jedes Element in der ArrayList in ein Student um.

Die Verwendung einer explizit eingegebenen Bereichsvariable in einem Abfrageausdruck entspricht dem Aufrufen der Cast Methode. Cast löst eine Ausnahme aus, wenn bei der Umwandlung ein Fehler auftritt. Cast und OfType sind die beiden Standardabfrageoperatormethoden, die für nicht generische IEnumerable Typen ausgeführt werden. In Visual Basic müssen Sie die Cast Methode für die Datenquelle explizit aufrufen, um einen bestimmten Bereichsvariablentyp sicherzustellen. Weitere Informationen finden Sie unter Typbeziehungen in Abfragevorgängen (Visual Basic).

Beispiel

Das folgende Beispiel zeigt eine einfache Abfrage über eine ArrayList. Beachten Sie, dass in diesem Beispiel Objektinitialisierer verwendet werden, wenn der Code die Add Methode aufruft, dies ist jedoch keine Anforderung.

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

Siehe auch