关于c#中DataTable的Select过滤
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于c#中DataTable的Select过滤相关的知识,希望对你有一定的参考价值。
dtTrees中的数据为select a.* from tb a,目标实现查询语句select a.* from tb a where exists (select 1 from tb b where a.id=b.pid),现没办法改变dtTrees数据源查询,请问如何在dtTrees.Select(exists (select 1 from tb b where a.id=b.pid))中实现如此过滤查询?
比如实现:
表结构如下(数据是动态的):
id pid name
28 27 a1
29 28 a2
30 28 a3
31 27 a4
32 31 a5
33 31 a6
要求查询结果:
id pid name
28 27 a1
31 27 a4
foreach (DataRow dr in dtTrees.Rows)
a += dr[0].ToString() + ",";
a = a.Trim(',');
DataRow[] drs = dtTrees.Select("pid not in (" + a + ")"); //这里用not in
//drs就是所要的查询结果。本回答被提问者和网友采纳 参考技术B 把select 1 from tb b where a.id=b.pid中的id以逗号分隔,弄成一个字符串,然后dtTrees.Select(id exists(弄成的字符串)) 参考技术C dtTrees.Select( "id = pid"); 参考技术D 不懂你要过滤什么
DataTable通过Select进行过滤
DataTable方法测试
//测试DataTable的select DataTable dt = new DataTable(); //a.OrderType, //a.[Status] dt.Columns.Add("No", typeof(String)); dt.Columns.Add("Type", typeof(String)); dt.Columns.Add("Status", typeof(String)); dt.Rows.Add(new object[] "A01", "N", "N1" ); dt.Rows.Add(new object[] "A01", "G", "G1" ); dt.Rows.Add(new object[] "A01", "T", "T1" ); dt.Rows.Add(new object[] "A01", "N", "N2" ); dt.Rows.Add(new object[] "A02", "G", "G1" ); dt.Rows.Add(new object[] "A02", "T", "T1" ); dt.Rows.Add(new object[] "A03", "N", "N1" ); dt.Rows.Add(new object[] "A04", "S", "S1" ); dt.Rows.Add(new object[] "A05", "G", "G1" ); dt.Rows.Add(new object[] "A05", "T", "T1" ); DataRow[] arrRow = dt.Select("No=‘A01‘ and ((Type=‘N‘) or (Type=‘G‘ and Status<>‘G1‘) or(Type=‘T‘ and Status<>‘T1‘))"); //Console.WriteLine(arrRow[0]["Type"]); var arrRow2= arrRow.Select<DataRow,DataRow>(dr=> if (dr["Type"].ToString() == "N") return dr; else return null; ); foreach(var r in arrRow2) if(r!=null) Console.WriteLine(r["No"].ToString()+"===="+r["Status"].ToString());
以上是关于关于c#中DataTable的Select过滤的主要内容,如果未能解决你的问题,请参考以下文章
C# Winform DataTable 怎么过滤两列不重复
我们可以在 c# 中的 datatable.select 中添加参数吗