在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                 });

 

posted on 2021-08-12 16:11  张不胖  阅读(812)  评论(0)    收藏  举报

导航