从 C# 中的 Dataview 排序后选择前 N 行

发布于 2024-09-25 17:09:40 字数 564 浏览 2 评论 0原文

我有一个包含 10 行的 DataTable,其中一列为 随机编号1到10。 我想对它们进行排序。通常,我会这样做:

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

现在,我只想绑定此数据视图中的前 5 行。如果我尝试这样做:

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行?

我似乎没有主意了! 请帮忙!

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!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幸福不弃 2024-10-02 17:09:40

您正在访问 DataView,但随后请求它绑定到的 Table - 表本身未排序,DataView 提供了表的排序“视图” 。

因此,请尝试(警告drycode!)

DvPopBlogs.DataViewRows.Take(5)

获取前 5 个(按排序顺序)DataViewRows。如果您想要 DataRows

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

DataView 中的枚举器很可能是 DataViewRows 集合,因此您可以只使用 DvPopBlogs.Take(5)....如果你愿意的话。

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.

梦在夏天 2024-10-02 17:09:40

既然您已经转换为通用列表,为什么不转换数据视图而不是数据表呢?

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

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文