Vorgehensweise: Abfragen von ArrayList mit LINQ (C#)

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:

var query = from Student s 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 die angegebene Umwandlung nicht durchgeführt werden kann. Cast und OfType sind die zwei Standardabfrageoperator-Methoden, die mit nicht generischen IEnumerable-Typen arbeiten. Weitere Informationen finden Sie unter Typbeziehungen in LINQ-Abfragevorgängen.

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, aber dies ist keine Voraussetzung.

using System;  
using System.Collections;  
using System.Linq;  

namespace NonGenericLINQ  
{  
    public class Student  
    {  
        public string FirstName { get; set; }  
        public string LastName { get; set; }  
        public int[] Scores { get; set; }  
    }  

    class Program  
    {  
        static void Main(string[] args)  
        {  
            ArrayList arrList = new ArrayList();  
            arrList.Add(  
                new Student  
                    {  
                        FirstName = "Svetlana", LastName = "Omelchenko", Scores = new int[] { 98, 92, 81, 60 }  
                    });  
            arrList.Add(  
                new Student  
                    {  
                        FirstName = "Claire", LastName = "O’Donnell", Scores = new int[] { 75, 84, 91, 39 }  
                    });  
            arrList.Add(  
                new Student  
                    {  
                        FirstName = "Sven", LastName = "Mortensen", Scores = new int[] { 88, 94, 65, 91 }  
                    });  
            arrList.Add(  
                new Student  
                    {  
                        FirstName = "Cesar", LastName = "Garcia", Scores = new int[] { 97, 89, 85, 82 }  
                    });  

            var query = from Student student in arrList  
                        where student.Scores[0] > 95  
                        select student;  

            foreach (Student s in query)  
                Console.WriteLine(s.LastName + ": " + s.Scores[0]);  

            // Keep the console window open in debug mode.  
            Console.WriteLine("Press any key to exit.");  
            Console.ReadKey();  
        }  
    }  
}  
/* Output:   
    Omelchenko: 98  
    Garcia: 97  
*/  

Siehe auch

LINQ to Objects (C#)