【问题标题】:Data table select top 5 rows数据表选择前5行
【发布时间】:2010-07-14 05:29:36
【问题描述】:

您好,有什么方法可以从数据表中选择前 5 行而不进行迭代?

【问题讨论】:

  • 为什么不调整用于构建数据表/数据集的底层选择? - google results 其他一切都将是一个迭代......
  • 我不确定您所说的“没有迭代”是什么意思。一种或另一种方式,如果您希望枚举任何形式的集合中的数据,您将不得不在某个时候迭代该数据。即使您使用 LINQ 的 .Take() 语句,您最终还是会遍历您获取的记录数。
  • @jrista,你总是可以做row[0], row[1], ..., row[4] 并避免迭代:-)
  • @darin: 至少你没有使用索引变量 :)
  • @Darin:您仍然会使用它进行迭代......只是使用“展开”循环......展开与否,概念是相同的。一种或另一种方式,您必须“迭代”行以获取它们的数据。我能得出的唯一结论是我误解了 OP 在这种情况下对“迭代”一词的含义/理解。

标签: c# datatable


【解决方案1】:

我认为,您可以使用 LINQ:

datatable.AsEnumerable().Take(5);

【讨论】:

  • 这基本上是一个迭代。这正是提问者不想要的!
  • @Andreas Niedermair,据我了解,查询者不想通过迭代编写自己的代码。
  • @Andreas:从技术上讲,调用.AsEnumerable().Take(5)不是迭代......但是。但是,无论哪种方式,都需要迭代来枚举该查询表示的数据......所以我不完全理解 OP 的目标。
  • @belousov:这就是我没有投反对票的原因 :) @jrista:调用方法不是迭代,但它会以迭代结束...
  • Pavel Belousov,正确的语法如下。 yourDatatable.AsEnumerable().OfType().Take(5).CopyToDataTable();谢谢
【解决方案2】:

使用上面的 2 个帖子,以下对我有用:

foreach (DataRow _dr in DataSet.Tables[<tblname>].Select("", "Timestamp DESC").AsEnumerable().OfType<DataRow>().Take(5))

所以现在您通常可以根据需要进行过滤,根据需要订购,然后仅获取所需的记录数量,然后遍历它们,无论是 1 还是 100。

希望对某人有所帮助。

【讨论】:

    【解决方案3】:

    这对我有用:

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

    【讨论】:

      【解决方案4】:

      这可以满足我的需要。

      public static DataTable TopRows(this DataTable dTable, int rowCount)
          {
              DataTable dtNew = dTable.Clone();
              dtNew.BeginLoadData();
              if (rowCount > dTable.Rows.Count) { rowCount = dTable.Rows.Count; }
              for (int i = 0; i < rowCount;i++)
              {
                  DataRow drNew = dtNew.NewRow();
                  drNew.ItemArray = dTable.Rows[i].ItemArray;
                  dtNew.Rows.Add(drNew);
              }
              dtNew.EndLoadData();
              return dtNew;
          }
      

      要使用它,请执行以下操作:

      dataTable.TopRows(5);
      

      【讨论】:

        【解决方案5】:

        如果您使用 LINQ 语句,则可以使用 Take() 方法。

        这个post 也可以提供一些帮助。

        编辑

        当您使用 VS2005 时,请在数据表中使用 SELECT() 方法,如下所示:

        DataRow[] rows = datatable.Select('TOP 5');
        

        【讨论】:

        • 但出现错误:过滤器表达式“Top 5”不计算为布尔项。
        猜你喜欢
        • 1970-01-01
        • 2012-08-16
        • 1970-01-01
        • 2012-03-21
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 2012-07-29
        • 2010-11-29
        相关资源
        最近更新 更多