从动态数据表中取出前10或20行

时间:2013-12-21 11:27:00

标签: c# asp.net

我的Datable中有100条记录说是

DataTable dt=new DataTable();

dt100条记录称列名为sub_id(contain int datatype)subheadername(contain nvarchar(150)),我希望20 records中的dt位于ascending 1}}命令

我将代码设为

//dtlcategories.DataSource = dt.AsEnumerable().OrderBy(x => x["subheadername"]).Take(20).ToList();
dtlcategories.DataSource = dt.Rows.Cast<DataRow>().OrderBy(x => x["subheadername"]).Take(20).ToList();
dtlcategories.DataBind();

这里的dtlcategories是Datalist,但是运行错误就像System.Data.DataRow&#39;不包含名称为&#39; subheadername&#39;。

的媒体资源

已解决的答案

dtlcategories.DataSource = dt.Rows.Cast<DataRow>().OrderBy(x => x["subheadername"]).Take(20).copytodatatable();
dtlcategories.DataBind();

5 个答案:

答案 0 :(得分:11)

使用LINQ有两种不同的方法可以做到这一点。这些都会返回相同的结果。

dt.AsEnumerable().OrderBy(x => x["subheadername"]).Take(20);

dt.Rows.Cast<DataRow>().OrderBy(x => x["subheadername"]).Take(20);

如果您要将结果用作其他控件的数据来源,则可能需要在.ToList()后调用.Take(x)

编辑:

我根据您的修改更改了列名称。如果你想按id排序(你没有指定),只需将“subheadername”替换为“sub_id”。

答案 1 :(得分:2)

此查询从db中获取前20个记录,然后按sub_id列对其进行排序。

var topTwenty = dt.AsEnumerable().Take(20).OrderBy(r => r.Field<int>("sub_id"));

答案 2 :(得分:1)

dt.AsEnumerable().OrderBy(row => row["sub_id"]).Take(20);

这将返回IEnumerable。现在遍历IEnumerable并将它们添加到另一个数据表中。现在你的最终数据表准备好了!!

答案 3 :(得分:1)

此代码根据日期对数据进行排序,并占据前100行。

 var table = new DataTable();
 var t = table.AsEnumerable();
 var result = t.OrderByDescending(f => f.Field<DateTime>(new DataColumn("Date"))).Take(100);

更新

var table = new DataTable();
var t = table.AsEnumerable();
var result = t.OrderBy(f => f.Field<String>(new DataColumn("subheadername"))).Take(20)

答案 4 :(得分:0)

可能的解决方案:

DataRow[] rows = dt.Select("sub_id< 100 ");