0
DataSet ds = gn.fillGrid_with_param_DAL("Allotment_Distribution_view", paramchk);

grd_Search.DataSource = ds.Tables[0].Select("Top 20");
grd_Search.DataBind();

我想从数据集中获取前 20 行。在我的数据集中,我从数据库中获取记录。我只需要选择前 20 行。以上是我试图将前 20 行绑定到我的网格的代码,但出现错误

missing operand after 20
4

5 回答 5

1
dt.Rows.Cast<System.Data.DataRow>().Take(n)

这会有所帮助

否则使用这个 LINQ:

dt.Table[0].AsEnumerable().Take(n);
于 2013-08-20T11:17:33.853 回答
0

您可以使用 LINQ:

ds.Tables[0].AsEnumerable().Take(20);

我不知道是什么gn,但是如果您从数据库中获取这些数据,我建议您修改您的查询,以便您只提取您需要的数据。它比撤回所有内容然后在客户端仅使用 20 条记录要快。

在 DB2 中,它是FETCH FIRST n ROWS ONLY. 对于 Oracle,请查看rownum。我认为对于 MSSQL,它类似于SELECT TOP n FROM...您必须对每个子句使用等效的 Order By 子句,以确保您想要的记录是第一个结果。

于 2013-08-20T11:17:59.403 回答
0

在框架 3.5dt.Rows.Cast<System.Data.DataRow>().Take(n)或更早的版本中,您可以使用

  public DataTable  SelectTopDataRow(DataTable dt, int count)
    {
         DataTable dtn = dt.Clone();
         for (int i = 0; i < count; i++)
         {
             dtn.ImportRow(dt.Rows[i]);
         }

         return dtn;
    }
于 2013-08-20T12:35:09.143 回答
0

我认为你试图在错误的地方解决你的问题。

为了防止将所有(可能是无限的)记录加载到内存中(例如“AsEnumerable”会这样做),我建议您在数据层解决这个问题。即确保您可以指定要在调用中fillGrid_with_param_DAL作为参数的顶级记录数量:

DataSet ds = gn.fillGrid_with_param_DAL("Allotment_Distribution_view", paramchk, 20);

大多数数据库支持在查询中获取“前 n”条记录。

对于 TSQL(SQL 服务器):

 SELECT TOP(5) Model, Color, Price
 FROM dbo.Cars
 WHERE Color = 'red';

对于 SQLite:

SELECT Model, Color, Price
FROM CARS 
WHERE Color = 'red'
LIMIT 5 OFFSET 0;
于 2013-08-20T11:29:46.903 回答
0

如果 .net framework 3.5 及更高版本,请使用:

DataTable dtTop = ds.Tables[0].Rows.Cast().Take(20).CopyToDataTable();

如果.net framework 2.0,做一个for循环,这里是一个使用ImportRow方法将行从表复制到表的示例:http: //alisissa.wordpress.com/2011/10/14/this-row-already-belongs-到另一张桌子/

于 2013-08-20T11:20:28.460 回答