Konvertieren von Datentypen
Aktualisiert: November 2007
Mit Konvertierungsmethoden wird der Typ von Eingabeobjekten geändert.
Konvertierungsoperationen in LINQ-Abfragen sind in einer Vielzahl von Anwendungen nützlich. Beispiele:
Die Enumerable.AsEnumerable<TSource>-Methode kann verwendet werden, um die benutzerdefinierte Implementierung eines Standardabfrageoperators für einen Typ auszublenden.
Die Enumerable.OfType<TResult>-Methode kann verwendet werden, um nicht parametrisierte Auflistungen für LINQ-Abfragen zu aktivieren.
Die Methoden Enumerable.ToArray<TSource>, Enumerable.ToDictionary, Enumerable.ToList<TSource> und Enumerable.ToLookup können verwendet werden, um die sofortige Abfrageausführung zu erzwingen und dies nicht zu verzögern, bis die Anfrage aufgelistet wurde.
Methoden
In der folgenden Tabelle werden die Standardabfrageoperator-Methoden aufgelistet, die Datentypkonvertierungen ausführen.
Die Konvertierungsmethoden in dieser Tabelle, deren Namen mit "As" beginnen, sind statische Typen der Quellauflistung, listen diese aber nicht auf. Die Konvertierungsmethoden in dieser Tabelle, deren Namen mit "To" beginnen, listen die Quellauflistung auf und fügen die Elemente in den entsprechenden Auflistungstyp ein.
Methodenname |
Beschreibung |
C#-Abfrageausdruckssyntax |
Visual Basic-Abfrageausdruckssyntax |
Weitere Informationen |
---|---|---|---|---|
AsEnumerable |
Gibt die Eingabe als IEnumerable<T> zurück. |
Nicht zutreffend. |
Nicht zutreffend. |
|
AsQueryable |
Konvertiert ein (generisches) IEnumerable in ein (generisches) IQueryable. |
Nicht zutreffend. |
Nicht zutreffend. |
|
Typumwandlung |
Wandelt die Elemente einer Auflistung in einen angegebenen Typ um. |
Verwenden Sie eine explizit typisierte Bereichsvariable. Beispiel: from string str in words |
From … As … |
|
OfType |
Filtert Werte danach, ob sie in einen angegebenen Typ umgewandelt werden können. |
Nicht zutreffend. |
Nicht zutreffend. |
|
ToArray |
Konvertiert eine Auflistung in ein Array. Diese Methode erzwingt die Ausführung der Abfrage. |
Nicht zutreffend. |
Nicht zutreffend. |
|
ToDictionary |
Legt Elemente basierend auf einer Schlüsselauswahlfunktion in einem Dictionary<TKey, TValue> ab. Diese Methode erzwingt die Ausführung der Abfrage. |
Nicht zutreffend. |
Nicht zutreffend. |
|
ToList |
Konvertiert eine Auflistung in eine List<T>. Diese Methode erzwingt die Ausführung der Abfrage. |
Nicht zutreffend. |
Nicht zutreffend. |
|
ToLookup |
Fügt Elemente basierend auf einer Schlüsselauswahlfunktion in einen Lookup<TKey, TElement> (ein 1:n-Wörterbuch) ein. Diese Methode erzwingt die Ausführung der Abfrage. |
Nicht zutreffend. |
Nicht zutreffend. |
Beispiele für die Abfrageausdruckssyntax
Das folgende Beispiel verwendet eine explizit typisierte Bereichsvariable in C# oder die From As-Klausel in Visual Basic, um einen Typ in einen Untertyp umzuwandeln, bevor auf ein Member zugegriffen wird, das nur im Untertyp verfügbar ist.
Class Plant
Public Name As String
End Class
Class CarnivorousPlant
Inherits Plant
Public TrapType As String
End Class
Sub Cast()
Dim plants() As Plant = { _
New CarnivorousPlant With {.Name = "Venus Fly Trap", .TrapType = "Snap Trap"}, _
New CarnivorousPlant With {.Name = "Pitcher Plant", .TrapType = "Pitfall Trap"}, _
New CarnivorousPlant With {.Name = "Sundew", .TrapType = "Flypaper Trap"}, _
New CarnivorousPlant With {.Name = "Waterwheel Plant", .TrapType = "Snap Trap"}}
Dim query = From plant As CarnivorousPlant In plants _
Where plant.TrapType = "Snap Trap" _
Select plant
Dim sb As New System.Text.StringBuilder()
For Each plant In query
sb.AppendLine(plant.Name)
Next
' Display the results.
MsgBox(sb.ToString())
' This code produces the following output:
' Venus Fly Trap
' Waterwheel Plant
End Sub
class Plant
{
public string Name { get; set; }
}
class CarnivorousPlant : Plant
{
public string TrapType { get; set; }
}
static void Cast()
{
Plant[] plants = new Plant[] {
new CarnivorousPlant { Name = "Venus Fly Trap", TrapType = "Snap Trap" },
new CarnivorousPlant { Name = "Pitcher Plant", TrapType = "Pitfall Trap" },
new CarnivorousPlant { Name = "Sundew", TrapType = "Flypaper Trap" },
new CarnivorousPlant { Name = "Waterwheel Plant", TrapType = "Snap Trap" }
};
var query = from CarnivorousPlant cPlant in plants
where cPlant.TrapType == "Snap Trap"
select cPlant;
foreach (Plant plant in query)
Console.WriteLine(plant.Name);
/* This code produces the following output:
Venus Fly Trap
Waterwheel Plant
*/
}
Weitere Informationen zum Konvertieren von Datentypen
Siehe auch
Konzepte
Übersicht über Standardabfrageoperatoren
LINQ-Abfrageausdrücke (C#-Programmierhandbuch)