2009-09-13 7 views
1

J'ajoute une colonne d'incrémentation automatique (appelé « rowNum ») à ma table et cela fonctionne bien, après que j'utiliser ce code pour trier les lignes DataTable:Comment trier dataset.table [0] puis obtenir le top 10?

DataView dv = MyDataSet.Tables[0].DefaultView; 
dv.Sort = "columnName DESC"; 

où columnName est l'une de mes colonnes (pas l'incrément automatique un).

Maintenant, le problème est: quand je veux obtenir les 10 premières lignes que j'utilise ce code:

dv.RowFilter = "rowNum <= 10"; 

Le résultat est pas ce que je veux, parce que quand je fais dv.Sort le rowNum brassé (devient dans le mauvais ordre).

Comment puis-je obtenir les 10 premières lignes après le tri des lignes?

Répondre

2

Je préfère LINQ pour ce genre de choses. Au lieu de cela, j'utilise System.Linq et j'écris:

var rows = MyDataSet.Tables[0].AsEnumerable() 
    .OrderByDescending(r => r["columnName"]) 
    .Take(10); 

puis de simplement se lier aux "rangées".

+0

Thanx beaucoup pour votre aide, mais pensez-vous que si cette façon fera du bien sur des lignes plus de 1000?. – Dabbas

+0

Oui. Cela devrait fonctionner au moins aussi bien que la solution DataView. –

0

si ajouter .Take (10) dans la ligne AsEnumerable() ne fonctionne pas. mais si ajouter une deuxième ligne comme mentionné ci-dessous fonctionne.

var Rows = (from row in dt.AsEnumerable() 
 
orderby row["CostPerVeteran"] descending 
 
select row); 
 

 
dtChart = Rows.Take(10).CopyToDataTable();

Questions connexes