Sortera och selektera DataTable

Här är en liten kort lösning på hur man väljer ut ett visst antal rader ur en DataTable och efter en definerad sortering. Ungefär som man gör i SQL-uttrycket (SELECT TOP).

Detta hade jag haft en del problem med tidigare i samband med hantering av ett DataSet. Idag lyckades jag genom att forska i det på bland annat DeveloperFusion, TheScripts och MSDN - DataTable.Select().

Jag hade satt ihop ett antal DataSet till ett kombinerat DataSet. När jag försökte iterera igenom detta sammasatta DataTable, kom alltid de rader jag hade lagt till först, överst i utskriften. Jag behövde ha sorteringen efter en specifik parameter som var gemensam för hela den nya datasamlingen, i mitt fall en datum-kolumn.

Här är lösningen som jag kom fram till. Den använder DataTable.Select() och lämnar första parametern tom. Den andra anges för att få rätt sortering. En array av DataTable-rader returneras. Dessa importerar jag en efter en till en klonad modell av DataTablen. Jag begränsar detta till 10 omgångar. Slutligen returneras en DataView.

DataView SelectTopSortedFromDataTable(DataTable objTable)
{
DataTable outputTable = objTable.Clone();

DataRow[] foundRows = objTable.Select("","PublishDate DESC");

for(int i=0;i<10;i++)
{
DataRow objDataRow = foundRows[i];
outputTable.ImportRow(objDataRow);
}

DataView dataView = outputTable.DefaultView;
return dataView;
}