Die System.DataSetExtensions.dll Assemlby ist für die Funktionalitäten von LINQ to DataSet notwendig. In dieser Assembly sind die Query Operatoren und Klassen für die DataSet-Objekte vorhanden. Mit Hilfe dieser Klassen und Methoden ist es möglich, LINQ-Abfragen für die DataSet-Objekte zu erstellen und auszuführen. Damit die nötigen Klassen zur Verfügung stehen, muss die System.Data.DataSetExtensions.dll Assemlby vom Visual Studio Projekt aus referenziert sein. Wenn der Namespace System.Data mit using System.Data; bereits importiert ist, stehen auch die Klassen der System.Data.DataSetExtensions.dll Assembly im Programmcode zur Verfügung, weil die Klassen der System.Data.DataSetExtensions auch den System.Data als Namespace besitzen.
Die wichtigsten Klassen der System.Data.DataSetExtesions.dll sind die Folgenden:
· System.Data.DataRowExtensions
· System.Data.DataTableExtensions
In der DataRowExtensions-Klasse finden Sie den Field<T>-Operator. Der Field<T>-Operator kann für die Ermittlung eines Wertes aus einem DataColumn von einem DataRow-Objekt verwendet werden.
Die Methoden AsDataView, AsEnumerable und CopyToDataTable finden Sie in der Klasse DataTableExtensions. Mit der AsDataView Methode können Sie den Resultat einer LINQ-Abfrage in einem DataView-Objekt umwandeln und als Datenquelle für ein DataGridView Control verwenden. Bei einem untypisierten DataSet-Objekt ermöglicht die Methode AsEnumerable die Verwendung von LINQ to Objects-Operatoren, wenn Sie bei einem DataTable-Objekt dieser Methode aufrufen.
Die folgende Codezeile zeigt, ein Beispiel, wie die AsDataView-Methode verwendet werden kann:
AdventureWorksDataSet ds = new AdventureWorksDataSet();
...
dataGridView1.DataSource = ds.ProductCategory.AsDataView();
In dem folgenden Beispiel wird das ProductCategory DataTable-Objekt für die LINQ-Abfrage als Datenquelle benutzt. Der Aufruf der AsEnumerable-Methode ist in diesem Fall nicht nötig, weil ein typisiertes DataSet als Datenquelle verwendet wird.
AdventureWorks ds1 = new AdventureWorks();
...
var qry1 = from pc in ds1.ProductCategory
where pc.ProductCategoryID == 1
select new
{
pc.ProductCategoryID,
pc.Name
};
Bei einem untypisierten DataSet kann die obige LINQ-Abfrage wie folgt aussehen:
DataSet ds2 = new DataSet("AdventureWorks");
DataTable productCategory = ds2.Tables["ProductCategory"];
var qry2 = from pc in productCategory.AsEnumerable()
where pc.Field<int>("ProductCategoryID") == 1
select new
{
ProductCategoryID = pc.Field<int>("ProductCategoryID"),
Name = pc.Field<string>("Name")
};
No comments:
Post a Comment