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.
Es gibt verschiedene Möglichkeiten, LINQ zu erweitern, um eine abfragefähige Datenquelle im LINQ-Muster zu ermöglichen. Die Datenquelle kann eine Datenstruktur, ein Webdienst, ein Dateisystem oder eine Datenbank sein, um einige zu benennen. Das LINQ-Muster erleichtert Clients das Abfragen einer Datenquelle, für die LINQ-Abfrage aktiviert ist, da sich die Syntax und das Muster der Abfrage nicht ändern. Zu den Möglichkeiten, wie LINQ auf diese Datenquellen erweitert werden kann, gehören die folgenden:
Implementieren der IEnumerable<T> Schnittstelle in einem Typ, um LINQ-to-Objects-Abfragen dieses Typs zu ermöglichen.
Erstellen von Standardabfrageoperatormethoden wie Where und Select, die einen Typ erweitern, um benutzerdefinierte LINQ-Abfragen für diesen Typ zu ermöglichen.
Erstellen eines Anbieters für Ihre Datenquelle, der die IQueryable<T> Schnittstelle implementiert. Ein Anbieter, der diese Schnittstelle implementiert, empfängt LINQ-Abfragen in Form von Ausdrucksbäumen, die auf benutzerdefinierte Weise ausgeführt werden können, z. B. aus der Ferne.
Erstellen eines Anbieters für Ihre Datenquelle, der eine vorhandene LINQ-Technologie nutzt. Ein solcher Anbieter würde nicht nur Abfragen, sondern auch Einfüge-, Aktualisierungs- und Löschvorgänge und -zuordnungen für benutzerdefinierte Typen ermöglichen.
In diesem Thema werden diese Optionen erläutert.
So aktivieren Sie LINQ-Abfragen Ihrer Datenquelle
Daten im Arbeitsspeicher
Es gibt zwei Möglichkeiten, LINQ-Abfragen von In-Memory-Daten zu aktivieren. Wenn es sich bei den Daten um einen Typ handelt, der IEnumerable<T> implementiert, können Sie die Daten mithilfe von LINQ to Objects abfragen. Wenn es nicht sinnvoll ist, die Aufzählung Ihres Typs durch Implementieren der IEnumerable<T> Schnittstelle zu aktivieren, können Sie LINQ-Standardabfrageoperatormethoden in diesem Typ definieren oder LINQ-Standardabfrageoperatormethoden erstellen, die den Typ erweitern. Benutzerdefinierte Implementierungen der Standardabfrageoperatoren sollten die verzögerte Ausführung verwenden, um die Ergebnisse zurückzugeben.
Ferndaten
Die beste Option zum Aktivieren der LINQ-Abfrage einer Remotedatenquelle besteht darin, die IQueryable<T> Schnittstelle zu implementieren. Dies unterscheidet sich jedoch von der Erweiterung eines Anbieters wie LINQ to SQL für eine Datenquelle. In Visual Studio 2008 sind keine Anbietermodelle zum Erweitern vorhandener LINQ-Technologien wie LINQ to SQL auf andere Datenquellentypen verfügbar.
IQueryable LINQ-Anbieter
LINQ-Anbieter, die implementieren IQueryable<T> , können in ihrer Komplexität stark variieren. In diesem Abschnitt werden die verschiedenen Komplexitätsebenen erläutert.
Ein weniger komplexer IQueryable Anbieter könnte mit einer einzigen Methode eines Webdienstes interagieren. Dieser Anbietertyp ist sehr spezifisch, da er bestimmte Informationen in den von ihr verarbeiteten Abfragen erwartet. Es verfügt über ein geschlossenes Typsystem, das möglicherweise einen einzelnen Ergebnistyp verfügbar macht. Der Großteil der Ausführung der Abfrage erfolgt lokal, z. B. mithilfe Enumerable der Implementierungen der Standardabfrageoperatoren. Ein weniger komplexer Anbieter untersucht möglicherweise nur einen Methodenaufrufausdruck in der Ausdrucksstruktur, die die Abfrage darstellt, und lässt die verbleibende Logik der Abfrage an anderer Stelle behandelt werden.
Ein IQueryable Anbieter mittlerer Komplexität kann auf eine Datenquelle abzielen, die eine teilweise ausdrucksstarke Abfragesprache aufweist. Wenn er auf einen Webdienst ausgerichtet ist, kann er eine Schnittstelle mit mehr als einer Methode des Webdiensts aufweisen und die Methode auswählen, die basierend auf der Frage aufgerufen werden soll, die die Abfrage darstellt. Ein Anbieter mittlerer Komplexität hätte ein umfangreicheres Typsystem als ein einfacher Anbieter, aber es wäre immer noch ein Festes Typsystem. Der Anbieter kann beispielsweise Typen verfügbar machen, die über 1:n-Beziehungen verfügen, die wiederum traversiert werden können, ohne eine Zuordnungstechnologie für benutzerdefinierte Typen bereitzustellen.
Ein komplexer IQueryable Anbieter, z. B. der LINQ to SQL-Anbieter, kann vollständige LINQ-Abfragen in eine ausdrucksstarke Abfragesprache wie SQL übersetzen. Ein komplexer Anbieter ist allgemeiner als ein weniger komplexer Anbieter, da er eine größere Anzahl von Fragen in der Abfrage verarbeiten kann. Es verfügt auch über ein offenes Typsystem und muss daher umfangreiche Infrastruktur enthalten, um benutzerdefinierte Typen zuzuordnen. Die Entwicklung eines komplexen Anbieters erfordert einen erheblichen Aufwand.