Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Konvertierungsmethoden ändern den Typ von Eingabeobjekten.
Wichtig
In diesen Beispielen wird eine System.Collections.Generic.IEnumerable<T>-Datenquelle verwendet. Datenquellen, die auf System.Linq.IQueryProvider basieren, verwenden System.Linq.IQueryable<T>-Datenquellen und Ausdrucksbaumstrukturen. Ausdrucksbaumstrukturen haben Einschränkungen für die zulässige C#-Syntax. Darüber hinaus kann jede IQueryProvider
-Datenquelle, z. B. EF Core, weitere Einschränkungen erzwingen. Konsultieren Sie die Dokumentation für Ihre Datenquelle.
Konvertierungsvorgänge in LINQ-Abfragen sind in verschiedenen Anwendungen nützlich. Nachstehend sind einige Beispiele aufgeführt:
- Die Enumerable.AsEnumerable-Methode kann zum Ausblenden einer benutzerdefinierten Implementierung eines Standardabfrageoperators eines Typs verwendet werden.
- Die Enumerable.OfType-Methode kann verwendet werden, um nicht parametrisierte Auflistungen für LINQ-Abfragen zu ermöglichen.
- Die Methoden Enumerable.ToArray, Enumerable.ToDictionary, Enumerable.ToList und Enumerable.ToLookup können verwendet werden, um die sofortige Ausführung einer Abfrage zu erzwingen, statt sie zu verzögern, bis die Abfrage enumeriert wurde.
Methoden
Die folgende Tabelle enthält die Standardabfrageoperator-Methoden, die Datentypumwandlungen ausführen.
Die Konvertierungsmethoden in dieser Tabelle, deren Namen mit „As“ beginnen, ändern den statischen Typ der Quellauflistung, listen ihn jedoch nicht auf. Die Methoden, deren Namen mit „To“ anfangen, listen die Quellauflistung auf und verschieben die Elemente in den entsprechenden Auflistungstyp.
Methodenname | Beschreibung | C#-Abfrageausdruckssyntax | Weitere Informationen |
---|---|---|---|
AsEnumerable | Gibt die Eingabe als IEnumerable<T> typisiert zurück | Nicht zutreffend. | Enumerable.AsEnumerable |
AsQueryable | Konvertiert ein (generisches) IEnumerable-Element in ein (generisches) IQueryable-Element | Nicht zutreffend. | Queryable.AsQueryable |
Typumwandlung | Kopiert die Elemente einer Auflistung in einen bestimmten Typ. | Verwenden Sie eine explizit typisierte Bereichsvariable. Zum Beispiel:from string str in words |
Enumerable.Cast Queryable.Cast |
OfType | Filtert Werte, je nach ihrer Fähigkeit, die in einen angegebenen Typ umgewandelt werden sollen. | Nicht zutreffend. | Enumerable.OfType Queryable.OfType |
ToArray | Konvertiert eine Auflistung in ein Array. Diese Methode erzwingt die Ausführung der Abfrage. | Nicht zutreffend. | Enumerable.ToArray |
ToDictionary | Platziert Elemente in ein Dictionary<TKey,TValue> auf Grundlage einer Schlüsselauswahlfunktion. Diese Methode erzwingt die Ausführung der Abfrage. | Nicht zutreffend. | Enumerable.ToDictionary |
ToList | Konvertiert eine Auflistung in eine List<T>. Diese Methode erzwingt die Ausführung der Abfrage. | Nicht zutreffend. | Enumerable.ToList |
ToLookup | Platziert Elemente, basierend auf einer Schlüsselauswahlfunktion, in ein Lookup<TKey,TElement> (one-to-many-Wörterbuch) ein. Diese Methode erzwingt die Ausführung der Abfrage. | Nicht zutreffend. | Enumerable.ToLookup |
Hinweis
In den folgenden Beispielen in diesem Artikel werden die allgemeinen Datenquellen für diesen Bereich verwendet.
Allen Student
sind eine Klassenstufe, ein primärer Fachbereich und mehrere Bewertungen zugeordnet.
Teacher
verfügen auch über eine City
-Eigenschaft, die den Campus identifiziert, auf dem die Lehrkraft unterrichtet. Eine Department
hat einen Namen und einen Verweis auf eine Teacher
, die den Fachbereich leitet.
Sie finden das Beispieldatensatz im Quell-Repository.
public enum GradeLevel
{
FirstYear = 1,
SecondYear,
ThirdYear,
FourthYear
};
public class Student
{
public required string FirstName { get; init; }
public required string LastName { get; init; }
public required int ID { get; init; }
public required GradeLevel Year { get; init; }
public required List<int> Scores { get; init; }
public required int DepartmentID { get; init; }
}
public class Teacher
{
public required string First { get; init; }
public required string Last { get; init; }
public required int ID { get; init; }
public required string City { get; init; }
}
public class Department
{
public required string Name { get; init; }
public int ID { get; init; }
public required int TeacherID { get; init; }
}
Beispiel für die Abfrageausdruckssyntax
Das folgende Codebeispiel verwendet eine explizit typisierte Bereichsvariable, um einen Typ vor dem Zugriff auf ein Element, das nur im Untertyp verfügbar ist, in einen Untertyp umzuwandeln.
IEnumerable people = students;
var query = from Student student in people
where student.Year == GradeLevel.ThirdYear
select student;
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}
Die entsprechende Abfrage kann mithilfe der Methodensyntax ausgedrückt werden, wie im folgenden Beispiel dargestellt:
IEnumerable people = students;
var query = people
.Cast<Student>()
.Where(student => student.Year == GradeLevel.ThirdYear);
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}