English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
Methode | Beschreibung |
---|---|
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) |
OfType | Filtern Sie die Sammlung basierend auf der angegebenen Typ |
ToArray | Konvertieren 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 |
ToLookup | Gruppieren Sie Elemente in Lookup<TKey, TElement> |
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()); } }
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.
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>()); } }
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.
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);
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.