在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   张不胖  阅读(682)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示