Выберите верхние N строк ПОСЛЕ сортировки из Dataview в c # - PullRequest
5 голосов
/ 30 сентября 2010

У меня есть DataTable с 10 строками, скажем, один из столбцов пронумерованы от 1 до 10 случайным образом. Я хочу отсортировать их. обычно я делаю это:

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

Теперь я просто хочу связать 5 верхних строк в этом Dataview. Если я попробую это:

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

OR

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

Это работает, но dataView полностью забывает о сортировке и просто выбирает 5 строк сверху.

Я пробовал это со всеми DataViewRowStates тоже. Как выделить 5 лучших строк после сортировки?

Кажется, у меня кончились идеи! пожалуйста помогите!

Ответы [ 2 ]

4 голосов
/ 30 сентября 2010

Вы обращаетесь к DataView, но затем запрашиваете Table, с которым оно связано - сама таблица не отсортирована, DataView обеспечивает отсортированное «представление» таблицы.

Поэтому попробуйте (предупреждающий сухой код!)

DvPopBlogs.DataViewRows.Take(5)

Чтобы получить первые 5 (в порядке сортировки) DataViewRows.Если вы хотите DataRows:

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

Вполне возможно, что перечислитель из DataView является коллекцией DataViewRows, поэтому вы можете просто использовать DvPopBlogs.Take(5)...., если хотите.

1 голос
/ 08 октября 2010

Поскольку вы преобразуете уже в общий список, почему бы не разыграть dataview вместо datatable?

IEnumerable<DataRow> sortedRows = DvPopBlogs.Cast<DataRowView>().Take(5).Select(r => r.Row);
...