.Net 3.5: Linq op een DataSet / DataTable

Ik zit op een project waar in een winform een typed DataTable wordt gebruikt om een DataGrid te vullen.
Een snelle implementatie: een tabel slepen op een dataset en je hebt een typed datatable en een typed datarow behorend bij die datatable.
Nou moest er een kleine selectie uit de gevulde datatable worden gemaakt, en nou is de gangbare manier om dat via een dataview te doen, en ik vroeg me af of het ook met Linq zou kunnen, want een datatable is toch ook een Enumerable object.
De volgende code is het geworden:

TransactieDataTable srcTable = ds.Transactie;
var result = from n in srcTable.Select()
    where n.Field<int>(srcTable.TransactieIdColumn) < 50
    select n as TransactieRow ;
DataTable doelTable= result.CopyToDataTable<TransactieRow>();
dgTransacties.DataSource = doelTable;

Wat gebeurt er allemaal?
– We starten met een strong typed DataTable srcTable;
– daar selecteren we alles uit, waarbij N een DataRow is, en geen typed DataRow;
– dan stoppen we in de where de property field<T>(index) waarbij we de index uit de strong typed DataTable halen;
– de T vervangen we door het juiste datatype van de transactiekolom, zijnde een int;
– en dan casten we N in de select naar de strong typed ‘TransactieRow’;
– de variabele sesult is dan een, let op: System.Linq.Enumerable.SelectIterator<System.Data.DataRow,TransactieRow>
– elke IEnumerable<T> waarbij T afleidt van een DataRow kan gebruik maken van de DataRow-extension method CopyToDataTable die er een datatable van maakt.

Tot slot: die datatable binden we dan aan een datagrid.

One thought on “.Net 3.5: Linq op een DataSet / DataTable

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s