11

我有一个数据表,我从 SQL 表中填充以下示例列

  • ID
  • 类型
  • 价值

我正在用某种类型的行填充 DataTable。我想从生成的 DataTable 中选择第 10 - 20 行:

Connect conn = new Connect();
SqlDataAdapter da = new SqlDataAdapter(SQL, conn.Connection());

//Creates data
DataTable d = new DataTable();
da.Fill(d);

DataRow[] result = d.Select();

在上面的代码中,我省略了主 SQL,目前我的 DataRow 数组没有选择。我找不到引用行号的方法。

所以例如我正在寻找类似的东西Select("rownum > X && rownum < Y")

我在这里搜索过,以及其他一些资源都无济于事。任何线索都会非常方便,或者只是简单的不可能。

4

2 回答 2

17

最好只从数据库中选择您需要的内容(通过使用TOP子句或类似的窗口函数ROW_NUMBER),而不是在内存中过滤它。

但是,您可以使用Linq-To-DataSetand Enumerable.Skip+ Enumerable.Take

var rows = d.AsEnumerable()
    .Skip(9).Take(11);  // select rows 10-20 as desired (so you want 11 rows)

如果你想要一个新DataTable的从过滤结果中使用CopyToDataTable,如果你想要一个DataRow[]使用rows.ToArray()

于 2013-02-05T21:54:30.617 回答
5

我只会执行“take”和“skip”命令并保持简单:

 d.Select().Skip(10).Take(10);  // skips 10 rows, then selects ten after that.

这将假设您有 Linq using set(使用 System.Linq)

于 2013-02-05T21:56:41.927 回答