Vorgehensweise: Abfragen von ArrayList mit LINQ (C#)How to: Query an ArrayList with 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.When using LINQ to query non-generic IEnumerable collections such as ArrayList, you must explicitly declare the type of the range variable to reflect the specific type of the objects in the collection. Wenn Sie zum Beispiel eine ArrayList mit Student-Objekten haben, sollte die from-Klausel wie folgt aussehen:For example, if you have an ArrayList of Student objects, your from clause should look like this:

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.By specifying the type of the range variable, you are casting each item in the ArrayList to a Student.

Die Verwendung einer explizit typisierten Bereichsvariablen in einem Abfrageausdruck entspricht dem Aufrufen der Cast-Methode.The use of an explicitly typed range variable in a query expression is equivalent to calling the Cast method. Cast löst eine Ausnahme aus, wenn bei der Umwandlung ein Fehler auftritt.Cast throws an exception if the specified cast cannot be performed. Cast und OfType sind zwei Standardabfrageoperator-Methoden, die mit nicht generischen IEnumerable-Typen arbeiten.Cast and OfType are the two Standard Query Operator methods that operate on non-generic IEnumerable types. Weitere Informationen finden Sie unter Typbeziehungen in LINQ-Abfragevorgängen.For more information, seeType Relationships in LINQ Query Operations.

BeispielExample

Im folgenden Beispiel wird eine einfache Abfrage von ArrayList veranschaulicht.The following example shows a simple query over an ArrayList. Beachten Sie, dass in diesem Beispiel Objektinitialisierer verwendet werden, wenn der Code die Add-Methode aufruft, aber dies ist keine Voraussetzung.Note that this example uses object initializers when the code calls the Add method, but this is not a requirement.

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 auchSee Also

LINQ to Objects (C#)LINQ to Objects (C#)