我的Datable中有100条记录说是
DataTable dt=new DataTable();
dt
有100
条记录称列名为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();
答案 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 ");