2008-01-14

LINQ to DataSet

DataSets sind sehr nützliche Elemente für die Datenhaltung im Speicher. Aus der Datenbank gelesenen Daten werden komplett in das DataSet-Objekt eingelesen und stehen für die Weiterverarbeitung innerhalb der Anwendung zur Verfügung.

Die DataSets können in zwei Kategorien, untypisierte und typisierte DataSets, unterteil werden. Beim untypisierten DataSets werden die Tabellen- und Feldnamen als String-Werte mitgegeben. Im typisierten DataSets stehen die Tabellen und Felder als Eigenschaft des jeweiligen Objektes zur Verfügung und bieten Entwickler bessere Intellisense Unterstützung während der Entwicklung.

DataSets können für die Datenhaltung im Speicher verwendet werden. Die Daten werden einmal aus der Datenbank geladen, stehen sie für die Anwendung als Objekte zur Verfügung. Die Unterstützung vom DataSet-Objekten innerhalb des .NET Frameworks vereinfacht die Implementierung von Datenbasierten Anwendung.

Ein DataSet kann mit den Daten von unterschiedlichen Datenquellen gefüllt werden. Inhalt einer XML-Datei oder die Daten einer relationalen Datenbank können in ein DataSet-Objekt übergeben und innerhalb der Anwendung weiter verwendet werden. Die Serialisierung eines DataSets ermöglicht zusätzlich, einen DataSet-Objekt als einen persistenten Datenspeicher zu benutzen. Die Daten können serialisiert und auf einen Datenträger als eine Datei gespeichert werden. Zu einem späteren Zeitpunkt kann der Inhalt dieser Datei wieder in das DataSet-Objekt geladen werden.

Es gibt mehrere Möglichkeiten, wie ein DataSet-Objekt mit Daten gefüllt werden kann. Die meist eingesetzte Variante ist die mit einem DataAdapter die Daten aus der Datenbank ermitteln und in das DataSet-Objekt füllen. Die Daten können mit einem DataAdapter nicht nur gelesen sonder auch wieder an die Datenbank weitergegeben. Bei dieser Variante können SQL-Anweisungen und Stored Procedures für die Ermittlung der Daten oder Weitergabe der Daten an die Datenbank verwendet werden.

Die Find, RowFilter und Select Methoden der DataSet-Klasse können für die Auswertung der Daten innerhalb eines DataSet-Objektes eingesetzt werden. Für die Auswertung dieser Daten wird ein SQL ähnliche Abfrage geschrieben, die als String-Objekt in den Programmcode integriert wird. Die Auswertungsmöglichkeiten mit diesen Methoden sind beschränkt und als String-Objekt vorhandene Abfragen können während des Kompiliervorganges vom Kompiler nicht auf allfällige Fehler geprüft werden.

LINQ to DataSet ermöglicht LINQ-Abfragen für die DataSet-Objekte zu schreiben. Dabei können Entwickler die Standard Query Operatoren für die Auswertung der Daten verwenden. Die Standard Query Operatoren bieten gegenüber dem bisherigen Auswertungsmöglichkeiten vom DataSets viel mehr Funktionalitäten und vor allem vereinfacht das Schreiben von Abfragen. Durch die LINQ-Abfragen müssen Entwickler keine neue Abfragesprache lernen und können die Abfragen mit einer .NET Sprache wie C# oder Visual Basic .NET schreiben. So können die Abfragen vom Kompiler auf Fehler geprüft werden.

Der folgende Codeabschnitt zeigt ein Beispiel, wie ein DataSet-Objekt mit einer LINQ-Abfrage ausgewertet kann.

AdventureWorks ds = new AdventureWorks();

var qry
= from pc in ds.ProductCategory
join psc
in ds.ProductSubcategory
on pc.ProductCategoryID equals psc.ProductCategoryID
select
new
{
pc.ProductCategoryID,
pc.Name,
psc.ProductSubcategoryID,
ProductSubCatName
= psc.Name
};

Wie in diesem Beispiel ersichtlich, unterscheidet sich dieser LINQ-Abfrage von den anderen LINQ-Abfragen nicht. Das gibt Entwickler, auch für die Auswertung von DataSet-Objekten einheitliche Abfragen zu schreiben.

Für den Einsatz von LINQ to DataSets wird der System.Data.DataSetExtensions.dll Assembly benötigt. Die neue Assembly war notwendig, damit die Erweiterte Methoden auch für die DataSets implementiert werden konnten.

No comments: