Abfragen einer ArrayList mit LINQ (Visual Basic)
Bei Verwendung von LINQ zum Abfragen nicht generischer IEnumerable-Auflistungen wie z.B. ArrayList müssen Sie den Typ der Bereichsvariablen entsprechend dem spezifischen Typ der Objekte in der Auflistung explizit deklarieren. Wenn Sie zum Beispiel eine ArrayList mit Student
-Objekten haben, sollte die 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 typisierten Bereichsvariablen 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 zwei Standardabfrageoperator-Methoden, die mit nicht generischen IEnumerable-Typen arbeiten. In Visual Basic müssen Sie die Cast-Methode explizit für die Datenquelle aufrufen, um einen bestimmten Bereichsvariablentyp sicherzustellen. Weitere Informationen finden Sie unter Typbeziehungen in Abfragevorgängen (Visual Basic).
Beispiel
Im folgenden Beispiel wird eine einfache Abfrage von ArrayList veranschaulicht. Beachten Sie, dass in diesem Beispiel Objektinitialisierer verwendet werden, wenn der Code die Add-Methode aufruft, aber dies ist keine Voraussetzung.
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