Выберите верхние N строк ПОСЛЕ сортировки из Dataview в C#

У меня есть 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 ответа

Решение

Вы получаете доступ к DataView, но затем запрашиваете Table это связано с - сама таблица не отсортирована, DataView обеспечивает отсортированный "вид" таблицы.

Так что попробуйте (предупреждение Drycode!)

DvPopBlogs.DataViewRows.Take(5)

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

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

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

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

IEnumerable<DataRow> sortedRows = DvPopBlogs.Cast<DataRowView>().Take(5).Select(r => r.Row);
Другие вопросы по тегам