删除DataTable中除指定行以外的行

dfpgb 2010-06-09 05:18:03
假设有一个DataTable的数据如下所示:

ID NAME MEMO
1 AA 1111
2 BB 2222
3 CC 3333
4 DD 4444
5 EE 5555
6 FF 6666
7 GG 7777
.. .. ....

要删除ID包含在集合(1,3,5,6,......)中以外的行,
也就是说保留ID包含在集合(1,3,5,6,......)中的行,其他的行删除.
...全文
628 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
lpxxn 2012-05-16
  • 打赏
  • 举报
回复
Tables.AsEnumerable().ToList().ForEach(x =>
{
if (x["idex"].ToString() != "0")
{
Tables.Rows.Remove(x);
}
});
lpxxn 2012-05-16
  • 打赏
  • 举报
回复
不用那么复杂这样
Tables.AsEnumerable().ToList().ForEach(x =>
{
if (x["idex"].ToString() != "0")
{
Tables.Rows.Remove(x);
}
});
GSDN00A 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 mngzilin 的回复:]
取反了

string str="1,3,5";
var obj5=from p in dt.Rows.Cast<DataRow>() where !str.Split(',').Contains(p["id"].ToString()) select p;
[/Quote]

mngzilin(海风),你来个linq的代码,不是想看楼主笑话,就是想让楼主动脑子,这是在害人呀。

楼主左半脑装的是面粉,右半脑装的是水,一动脑子就变成糨糊了。

楼上有价值的代码有好几种,楼主不是无视,就是结贴时给个1-2分,竟然给了我11分,谢谢了。

所以说,楼主不仅是个“超级大菜鸟”,而且还是个“超级大笨蛋”。哈哈。
dfpgb 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 mngzilin 的回复:]
取反了

string str="1,3,5";
var obj5=from p in dt.Rows.Cast<DataRow>() where !str.Split(',').Contains(p["id"].ToString()) select p;
[/Quote]
[Quote=引用 36 楼 mngzilin 的回复:]
取反了

string str="1,3,5";
var obj5=from p in dt.Rows.Cast<DataRow>() where !str.Split(',').Contains(p["id"].ToString()) select p;
[/Quote]

我直接茫然...
dfpgb 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 gsdn00a 的回复:]
引用 36 楼 mngzilin 的回复:
取反了

string str="1,3,5";
var obj5=from p in dt.Rows.Cast<DataRow>() where !str.Split(',').Contains(p["id"].ToString()) select p;


mngzilin(海风),你来个linq的代码,不是想看楼主笑话,就是想让楼主动……
[/Quote]

分高的是对我有用的....
mck477 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wo6522317 的回复:]
C# code

DataTable dt = new DataTable("Data");
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));

dt.Rows.Add(1, "小三1");
……
[/Quote]
16 楼,应该可以,我一直都是这么干的,不过每次用完remove后要加上。dr.AcceptChanges();
wo6522317 2010-06-10
  • 打赏
  • 举报
回复
"调用了Update可是Remove数据里就是没删除掉用Delete就可以,非常奇怪"
-------------
如果要Update更新数据库,要调用 Delete() 方法才行,并且之后不能调用 AcceptChanges() 方法;
-------------
MSDN:
Remove()方法:当移除行时,该行中的所有数据都将丢失。还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 Remove 等同于先调用 Delete 再调用 AcceptChanges。

mngzilin 2010-06-10
  • 打赏
  • 举报
回复
取反了

string str="1,3,5";
var obj5=from p in dt.Rows.Cast<DataRow>() where !str.Split(',').Contains(p["id"].ToString()) select p;
mngzilin 2010-06-10
  • 打赏
  • 举报
回复
可惜了,就差linq了,来一个:

DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Rows.Add("1");
dt.Rows.Add("2");
dt.Rows.Add("3");
dt.Rows.Add("4");
dt.Rows.Add("5");
dt.Rows.Add("6");

string str="1,3,5";
var obj5=from p in dt.Rows.Cast<DataRow>() where str.Split(',').Contains(p["id"].ToString()) select p;
xingjibing 2010-06-10
  • 打赏
  • 举报
回复
晕了,楼主一会儿说不能删掉数据库,一会儿说没有删掉数据库
缭绕飘渺 2010-06-10
  • 打赏
  • 举报
回复
同意直接使用过滤的方法
lzsh0622 2010-06-10
  • 打赏
  • 举报
回复

string[] ids="1,3,5".Split(','); // 需要删除的ID号,存入数据组
for (int i = dt.Rows.Count - 1; i >= 0; i--) // 集合元素删除操作,倒序删除
{
if (Array.IndexOf(ids,dt.Rows[i]["id"].ToString())>=0) // 当前id号是否属于删除范围
{
dt.Rows[i].Delete();
}
}

这个方法中用到: Array.IndexOf ,String.Split , 倒序的for结构.
GSDN00A 2010-06-09
  • 打赏
  • 举报
回复
for (int j = 0; j < myDataRowsError.Length; j++)
{
//m_myDataSet.Tables[m_strMyDataSource].Rows.Remove(myDataRowsError[j]);//如果用这句数据库里的数据并没有删除掉
myDataRowsError[j].Delete();//用这句数据库里的数据才会删除掉
}

集合内删除,这种写法就不对。 Delete()能删除也是侥幸,出错的地方没让你遇上。
yilaozhuang 2010-06-09
  • 打赏
  • 举报
回复
方法好多啊,不知道高手与菜鸟的区别是不是在这里,同样的目标,程序量和效率差那么多
小黑哥gs 2010-06-09
  • 打赏
  • 举报
回复
你是在不行再数据库中新建一个临时表。。将你要的数据插入。。然后将临时表的数据绑定和跟新至数据库表
dfpgb 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 gsdn00a 的回复:]
引用 24 楼 dfpgb 的回复:
调用了Update可是Remove数据里就是没删除掉用Delete就可以,非常奇怪

前言不搭后语,楼主非常奇怪。
[/Quote]

不好意思,我的意思是

DataRow[] myDataRowsError = myDataSet.Tables[strMyDataSource].Select("ID not in (" + strfilterExpression + ")");
for (int j = 0; j < myDataRowsError.Length; j++)
{
//m_myDataSet.Tables[m_strMyDataSource].Rows.Remove(myDataRowsError[j]);//如果用这句数据库里的数据并没有删除掉
myDataRowsError[j].Delete();//用这句数据库里的数据才会删除掉
}

mySqlCeDataAdapter.Update(myDataSet, strMyDataSource);



似乎要用16楼的方法了?
GSDN00A 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 dfpgb 的回复:]
调用了Update可是Remove数据里就是没删除掉用Delete就可以,非常奇怪
[/Quote]
前言不搭后语,楼主非常奇怪。
dfpgb 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 wuyq11 的回复:]
DataTable dt = new DataTable ();
DataRow[] drArray = dt.Select("Id = 1");
for(int i=0; i <drArray.Length; i++)
dt.Rows.Remove(drArray[i]);
SqlDataAdapter更新数据
[/Quote]
调用了Update可是Remove数据里就是没删除掉用Delete就可以,非常奇怪
wuyq11 2010-06-09
  • 打赏
  • 举报
回复
DataTable dt = new DataTable ();
DataRow[] drArray = dt.Select("Id = 1");
for(int i=0; i <drArray.Length; i++)
dt.Rows.Remove(drArray[i]);
SqlDataAdapter更新数据
waiwai1015 2010-06-09
  • 打赏
  • 举报
回复
帮你顶
加载更多回复(21)

110,536

社区成员

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

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

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