代码之家  ›  专栏  ›  技术社区  ›  iamserious

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

  •  5
  • iamserious  · 技术社区  · 16 年前

    随机编号1到10。 我想把它们分类。通常,我会这样做:

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

    现在,我只想绑定这个Dataview中的前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行。

    2 回复  |  直到 16 年前
        1
  •  4
  •   Philip Rieck    16 年前

    您正在访问DataView,但随后请求 Table 它被绑定到-表本身没有被排序 DataView

    所以试试(警告drycode!)

    DvPopBlogs.DataViewRows.Take(5)
    

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

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

    DataView中的枚举器很可能是DataViewRows集合,所以您可以使用 DvPopBlogs.Take(5)....

        2
  •  1
  •   Peter    16 年前

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