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
答案 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;
}