各位好:     哪位大侠知道如何在已经填充的DataSet数据集中做进一步筛选? 
虚拟表如下: 
InBox: 
id    name   sex 
1     123     F 
2     234     M 
3     345     F 我想进行两次筛选,第一次淘汰sex='M'的。其余留在数据集InBox表中 第二次淘汰name 包含 '1'的。其余留在数据集InBox表中 最后理想结果应该是数据集InBox表中有一个记录, 
3    345    F 哪位大侠知道数据集中的相应代码怎么写, 
就像在数据集表中执行SQL(Select)那样的功能, 
不吝赐教。。

解决方案 »

  1.   

    DataRow[] selected = dt.Select("sex <> 'M'");
                DataTable clone1 = dt.Clone();
                foreach(DataRow dr in selected)
                {
                    clone1.Rows.Add(dr.ItemArray);
                }
                selected = clone1.Select("name not like '%1%'");
                DataTable clone2 = dt.Clone();
                foreach (DataRow dr in selected)
                {
                    clone2.Rows.Add(dr.ItemArray);
                }
                foreach(DataRow dr in clone2.Rows)
                {
                    Console.WriteLine(dr["name"]);
                }
      

  2.   


    DataTable newDt = new DataTable();
    for(int i=0; i<dt.Rows.Count; i++)
    {
      string gender = dr["Sex"].ToString();
      string name = dr["Name"].ToString();
      if(!(gender.Upper().Equals("M")) && !(name.IndexOf("1")>0))
      {
        DataRow ddr = newDt.NewRow();
        ddr = dr.Clone();
        newDt.Add(ddr);
      }
    }
      

  3.   


    //sorry,没改全
    DataTable newDt = new DataTable();
    foreach(DataRow dr in dt.Rows)
    {
      string gender = dr["Sex"].ToString();
      string name = dr["Name"].ToString();
      if(!(gender.Upper().Equals("M")) && (name.IndexOf("1")==-1))
      {
        DataRow ddr = newDt.NewRow();
        ddr = dr.Clone();
        newDt.Add(ddr);
      }
    }
      

  4.   

    请用表的数据视图来做,如下列代码中的dvDataTable InBox
    DataView dv=new DataView(InBox);
    dv.RowFilter="sex<>'M' and name not LIKE '%1%'"
      

  5.   

    使用DataView
    DataView dv1=InBox.Table[0].DefaultView();
    dv1.RowFilter="sex!='M' and name not like '%1%'";
    下面就继续使用 dv1做数据源 就可以了
      

  6.   

    对不起呀,我的意思好像没有表达清楚,大家都误会了,其实我是想,后一次的搜索建立在前一次搜索所得的集合中,比如这样,第一次对dataset.table[0]内的记录进行搜索,把得到的结果赋值给dataset.table[0],以方便第二次再对其搜索,不知道一样可不可以,谢谢了
      

  7.   

    哦~~~谢谢这位大侠,其实我也有试过用dataview做的,比如说定义一个dataview dv后,假设开始的数据集为A,对它进行筛选dv.RowFilter后,得到的数据集是B,现在我想在B的基础上进行第二次筛选,得到数据集C。但是后来发现如果第二次还是用dv.RowFilter,得到的结果只是在A上的筛选,而不是B。
    是不是第一筛选掉的记录集只是隐藏起来而已,并没有真正的筛除,所以导致第二次的筛选还是建立在记录集A上。
    呵呵~~~请教请教,我真的很不懂,请问有什么解决办法啊?