如何从asp.net C#中的数据集中选择前20行

时间:2013-08-20 11:13:10

标签: c# asp.net

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

5 个答案:

答案 0 :(得分:1)

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

这将有所帮助

否则使用此LINQ:

dt.Table[0].AsEnumerable().Take(n);

答案 1 :(得分: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子句,以确保你想要的记录是第一个结果。

答案 2 :(得分: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-to-another-table/

答案 3 :(得分:0)

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

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

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

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

对于TSQL(SQL Server):

 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;

答案 4 :(得分:0)

在框架3.5中,dt.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;
    }