在dt或者ds中排序查询 DataTable.AsEnumerable()
1 protected void Main() 2 { 3 DataSet ds=new DataSet(); 4 5 dt = ds.Tables[0]; 6 var tablequery = dt.AsEnumerable().OrderBy(a => a.Field<int>("level")); 7 getBindTable(tablequery, dt);10 } 11 12 private DataTable getBindTable(IEnumerable enumerable, DataTable sourcetable) 13 { 14 DataTable dt = new DataTable(); 15 dt = sourcetable.Clone(); 16 foreach (DataRow Item in enumerable) 17 { 18 dt.Rows.Add(Item.ItemArray); 19 } 20 return dt; 21 22 }
一些需求是要求,在数据库查询之后的结果DataSet中,再做一些回填的操作,回填之后根据新字段进行排序或者查询。但DataSet不能直接排序,所以转成使用DataTable中的方法
ds就是做完回填的DataSet,转成DataTable。若要排序,完成此操作的常规方法是执行AsEnumerable(),从而将其转换为可行的对象。
IEnumerator/IEnumerable接口 ,叫做非泛型接口形式.。IEnumerator可枚举的属性是那些可以通过for..in循环迭代的属性。
最后用getBindTable()方法转换为dt,再进行后续常规绑定!Perfect~
还有几篇可参考的:c#-了解LINQ to SQL中的.AsEnumerable() - ITranslater
Lamdba及DataTable AsEnumerable()的使用_MapleGone的博客-CSDN博客
因为我的需求是有两个排序条件,所以试了一下另一个方法:
DT=dt.AsEnumerable().OrderBy(o => (o.Field<String>("AREANAME"), o.Field<int>("level"))).CopyToDataTable();
就不用调用其他的方法来转换,最后还是DataTable类型,可以直接用!VeryPerfect!!!
DataTable is YYDS!
我师傅还额外教会我另一种排序方法,算是曲线救国。可以用作以后排序的参考~
1 List<DataRow> rows = new List<DataRow>(); 2 foreach (DataRow item in ds.Tables[0].Rows) 3 { 4 rows.Add(item); 5 } 6 rows.Sort((v1, v2) => 7 { 8 DataRow r1 = v1 as DataRow; 9 DataRow r2 = v1 as DataRow; 10 int l1 = int.Parse(r1["level"].ToString()); 11 int l2 = int.Parse(r2["level"].ToString()); 12 return l1 - l2; 13 14 });
。
浙公网安备 33010602011771号