English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

LINQ-Umwandlungs-Operatoren

Der Conversion-Operator in LINQ kann zur Typkonversion von Elementen in einer Sequenz (Sammlung) verwendet werden. Die Conversion-Operatoren werden in drei Kategorien unterteilt:AsOperatoren (AsEnumerable und AsQueryable),ToOperatoren (ToArray, ToDictionary, ToList und ToLookup) undKonvertierungOperatoren (Cast und OfType).

Die folgende Tabelle listet alle Konvertierungsoperatoren auf.

MethodeBeschreibung
AsEnumerable

Geben Sie die Eingabesequenz als IEnumerable < T> zurück

AsQueryable

Konvertieren Sie IEnumerable zu IQueryable, um einen Remote-Abfrageanbieter zu simulieren

Cast

Konvertieren Sie eine nicht generische Sammlung in eine generische Sammlung (IEnumerable zu IEnumerable)

OfTypeFiltern Sie die Sammlung basierend auf der angegebenen Typ
ToArrayKonvertieren Sie die Sammlung in ein Array
ToDictionary

Legen Sie Elemente basierend auf der Funktion des Schlüsselwählers in einem Dictionary ab

ToList

Konvertieren Sie die Sammlung in eine List

ToLookupGruppieren Sie Elemente in Lookup<TKey, TElement>

AsEnumerable und AsQueryable Methoden

Die Methoden AsEnumerable und AsQueryable konvertieren den Quellobjekt in IEnumerable<T> oder IQueryable<T>.

Sehen Sie sich die folgenden Beispiele an:

class Program
{
    static void ReportTypeProperties<T>(T obj)
    {
        Console.WriteLine("Compile"-time type: {0}
        Console.WriteLine("Aktuelle Typen: {0}", obj.GetType().Name);
    }
    static void Main(string[] args)
    {
        Student[] studentArray = { 
                new Student() { StudentID = 1, StudentName = "John",     Age = 18 } ,
                new Student() { StudentID = 2, StudentName = "Steve",     Age = 21 } ,
                new Student() { StudentID = 3, StudentName = "Bill",     Age = 25 } ,
                new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
                new Student() { StudentID = 5, StudentName = "Ron" , Age = 31 } ,
            };   
            
        ReportTypeProperties(studentArray);
        ReportTypeProperties(studentArray.AsEnumerable());
        ReportTypeProperties(studentArray.AsQueryable());   
    }
}
Ausgabe:
Kompilieren-Zeit-Typ: Student[]
Aktuelle Typen: Student[]
Kompilieren-Zeit-Typ: IEnumerable`1
Aktuelle Typen: Student[]
Kompilieren-time type: IQueryable`1
Aktueller Typ: EnumerableQuery`1

Wie im obigen Beispiel gezeigt, konvertieren die Methoden AsEnumerable und AsQueryable den Typ des Kompilierungszeitpunkts in IEnumerable und IQueryable.

Cast

Die Funktion von Cast ist gleich AsEnumerable<T>. Es konvertiert den Quellobjekt in IEnumerable<T>.

class Program
{
    static void ReportTypeProperties<T>(T obj)
    {
        Console.WriteLine("Compile"-time type: {0}
        Console.WriteLine("Aktuelle Typen: {0}", obj.GetType().Name);
    }
    static void Main(string[] args)
    {
        Student[] studentArray = { 
                new Student() { StudentID = 1, StudentName = "John",     Age = 18 } ,
                new Student() { StudentID = 2, StudentName = "Steve",     Age = 21 } ,
                new Student() { StudentID = 3, StudentName = "Bill",     Age = 25 } ,
                new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
                new Student() { StudentID = 5, StudentName = "Ron" , Age = 31 } ,
            };   
         
        ReportTypeProperties(studentArray);
        ReportTypeProperties(studentArray.Cast<Student>());
    }
}
Ausgabe:
Kompilieren-Zeit-Typ: Student[]
Aktuelle Typen: Student[]
Kompilieren-Zeit-Typ: IEnumerable`1
Aktuelle Typen: Student[]
Kompilieren-Zeit-Typ: IEnumerable`1
Aktuelle Typen: Student[]
Kompilieren-Zeit-Typ: IEnumerable`1
Aktuelle Typen: Student[]

studentArray.Cast<Student>() ist gleich (IEnumerable<Student>)studentArray, aber Cast<Student>() ist besser lesbar.

To-Operator: ToArray(), ToList(), ToDictionary()

Wie der Name schon sagt, umwandeln die Methoden ToArray(), ToList(), ToDictionary() des Quellobjekts in ein Array, eine Liste oder ein Wörterbuch.

Der To-Operator erzwingt die Abfrage. Er erzwingt, dass der entfernte Abfrageanbieter die Abfrage ausführt und das Ergebnis aus der untersten Datenquelle (wie einer SQL Server-Datenbank) abruft.

IList<string> strList = new List<string>() { 
                                            "One", 
                                            "Two", 
                                            "Three", 
                                            "Four", 
                                            "Three" 
                                            };
string[] strArray = strList.ToArray<string>();// Liste in Array umwandeln
IList<string> list = strArray.ToList<string>(); // konvertiert ein Array in eine Liste

ToDictionary - Generic-Listen umwandeln in Generic-Wörterbuch:

IList<Student> studentList = new List<Student>() { 
                    new Student() { StudentID = 1, StudentName = "John", Alter = 18 } ,
                    new Student() { StudentID = 2, StudentName = "Steve",  Alter = 21 } ,
                    new Student() { StudentID = 3 18 } ,
                    new Student() { StudentID = 4 20 } ,
                    new Student() { StudentID = 5, StudentName = "Ron" , Alter = 21 } 
                };
//Nachstehend wird die Liste in ein Wörterbuch konvertiert, wobei StudentId der Schlüssel ist
IDictionary<int, Student> studentDict = 
                                studentList.ToDictionary<Student, int>(s => s.StudentID); 
foreach(var key in studentDict.Keys)
	Console.WriteLine("Schlüssel: {0}, Wert: {1", 
                                key, (studentDict[key] as Student).StudentName);
Ausgabe:
Schlüssel: 1, Wert: John
Schlüssel: 2, Wert: Steve
Schlüssel: 3, Wert: Bill
Schlüssel: 4, Wert: Ram
Schlüssel: 5, Wert: Ron

Das folgende Diagramm zeigt, wie studentDict einen key enthält, der in dem obigen Beispiel gezeigt wird.-value-Paare, wobei key der StudentID ist und value ein Student-Objekt.

LINQ-ToDictionary-Operatoren