关于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

参考技术A string a = ""; //这里可以使用StringBuilder
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 怎么过滤两列不重复

DataTable数据过滤

我们可以在 c# 中的 datatable.select 中添加参数吗

C#中的dev控件,怎么获取gridcontrol过滤后的数据源

c#,datatable中对时间的过滤过滤

DataTable通过Select进行过滤