Udostępnij za pośrednictwem


Porady: wykonywanie zapytań o tablicęList za pomocą LINQ (Visual Basic)

W przypadku używania LINQ do wykonywania zapytań dotyczących kolekcji innych niż ogólne IEnumerable , takich jak ArrayList, należy jawnie zadeklarować typ zmiennej zakresu, aby odzwierciedlić określony typ obiektów w kolekcji. Jeśli na przykład masz ArrayListStudent obiekty, klauzula From powinna wyglądać następująco:

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

Określając typ zmiennej zakresu, rzutujesz każdy element w elemencie ArrayListStudentna .

Użycie jawnie typizowanej zmiennej zakresu w wyrażeniu zapytania jest równoważne wywołaniu Cast metody. Cast zgłasza wyjątek, jeśli nie można wykonać określonego rzutu. Cast i OfType to dwie standardowe metody operatorów zapytań, które działają na typach niegenerycznych IEnumerable . W języku Visual Basic należy jawnie wywołać metodę Cast w źródle danych, aby zapewnić określony typ zmiennej zakresu. Aby uzyskać więcej informacji, zobacz Relacje typów w operacjach zapytań (Visual Basic).

Przykład

W poniższym przykładzie pokazano proste zapytanie względem elementu ArrayList. Należy pamiętać, że w tym przykładzie użyto inicjatorów obiektów, gdy kod wywołuje metodę Add , ale nie jest to wymagane.

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

Zobacz też