Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Select top N rows AFTER sorting from Dataview in c#

Tags:

c#

dataview

I have a DataTable with 10 rows say one of the columns numbered 1 to 10 randomly. I want to sort them. usually, I do this:

DataView Dv = new DataView(dtPost, "", "views desc", DataViewRowState.Unchanged);
repeater.DataSource = Dv;
repeater.DataBind();

Now, I just want to bind the top 5 rows in this Dataview. If I try this:

DvPopBlogs.Table.Rows.Cast<System.Data.DataRow>().Take(5);

OR

DvPopBlogs.Table.AsEnumerable().Take(5); //this usually works if sorting wasnt necessary

It works, but the dataView completely forgets about the sorting and just selects 5 rows from top.

I have tried it with all DataViewRowStates too. How to select top 5 rows after sorting?

I seem to run out of ideas! please help!

like image 963
iamserious Avatar asked Sep 30 '10 13:09

iamserious


2 Answers

You are accessing the DataView, but then asking for the Table it is bound to - the table itself isn't sorted, the DataView provides a sorted "view" of the table.

So try (warning drycode!)

DvPopBlogs.DataViewRows.Take(5)

To get the first 5 (in sort order) DataViewRows. If you want the DataRows:

DvPopBlogs.DataViewRows.Take(5).Select(dvr => dvr.Row)

It's quite possible the enumerator from DataView is the DataViewRows collection, so you may be able to just use DvPopBlogs.Take(5).... if you wish.

like image 78
Philip Rieck Avatar answered Oct 03 '22 23:10

Philip Rieck


Since you are casting already to a generic list, why not cast the dataview instead of the datatable?

IEnumerable<DataRow> sortedRows = DvPopBlogs.Cast<DataRowView>().Take(5).Select(r => r.Row);
like image 43
Peter Avatar answered Oct 03 '22 23:10

Peter