在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 });
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义