如何对dataset进行二次筛选

HDKSHP 2008-05-03 04:19:21
各位好:

哪位大侠知道如何在已经填充的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)那样的功能,
不吝赐教。。。。。
...全文
358 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
HDKSHP 2008-05-03
  • 打赏
  • 举报
回复
哦~~~谢谢这位大侠,其实我也有试过用dataview做的,比如说定义一个dataview dv后,假设开始的数据集为A,对它进行筛选dv.RowFilter后,得到的数据集是B,现在我想在B的基础上进行第二次筛选,得到数据集C。但是后来发现如果第二次还是用dv.RowFilter,得到的结果只是在A上的筛选,而不是B。
是不是第一筛选掉的记录集只是隐藏起来而已,并没有真正的筛除,所以导致第二次的筛选还是建立在记录集A上。
呵呵~~~请教请教,我真的很不懂,请问有什么解决办法啊?
wxy0401 2008-05-03
  • 打赏
  • 举报
回复
不建议这样做,因为这样建立N个表的复制品,一是占用内存,二是会使数据的一致性产生问题。
建议使用表的视图来做,可以创建N个视图分别设置不同的查询条件。
HDKSHP 2008-05-03
  • 打赏
  • 举报
回复
对不起呀,我的意思好像没有表达清楚,大家都误会了,其实我是想,后一次的搜索建立在前一次搜索所得的集合中,比如这样,第一次对dataset.table[0]内的记录进行搜索,把得到的结果赋值给dataset.table[0],以方便第二次再对其搜索,不知道一样可不可以,谢谢了
kqh168 2008-05-03
  • 打赏
  • 举报
回复
使用DataView
DataView dv1=InBox.Table[0].DefaultView();
dv1.RowFilter="sex!='M' and name not like '%1%'";
下面就继续使用 dv1做数据源 就可以了
wxy0401 2008-05-03
  • 打赏
  • 举报
回复
请用表的数据视图来做,如下列代码中的dv

DataTable InBox
DataView dv=new DataView(InBox);
dv.RowFilter="sex<>'M' and name not LIKE '%1%'"

changjiangzhibin 2008-05-03
  • 打赏
  • 举报
回复

//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);
}
}

changjiangzhibin 2008-05-03
  • 打赏
  • 举报
回复

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);
}
}
fuadam 2008-05-03
  • 打赏
  • 举报
回复
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"]);
}

110,590

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧