我有这样的 DataTable
name age
------------
kumar 27
kiran 29
anu 24
peter 34
tom 26
manu 35
sachin 37
geetha 23
现在我有另一个 DataTable
这样有一列:
name
----
manu
tom
anu
我需要比较 name 列中的值,并删除所有共享相同名称的行 . 现在结果输出应该是这样的:
name age
------------
kumar 27
kiran 29
peter 34
sachin 37
geetha 23
我怎么能得到这个结果?
4 回答
假设你的意思是.NET datatables而不是SQL表 . 一种方法如下 . 将您的第二个数据表转换为字典,如下所示:
你必须从头到尾循环,否则你会遇到问题(不能在这里使用
foreach
,它会抛出异常) .编辑:更好的解决方案
部分灵感来自下面与Jerod的一些讨论,我认为必须有一种方法来使用's easy to read and apply. Previously, it didn'工作的LINQ表达式,因为我枚举了DataRowView本身,当你尝试删除某些东西时,会引发一个
InvalidOperationException
,告诉你该集合已被修改 . 这是我做的,它的工作原理是因为我们使用Select
来创建行项的副本:一种方法是:
创建表达式以匹配行;即"name='manu' OR name='tom' OR name='anu'"
对原始数据表执行表达式以选择要删除的行 .
循环并删除所有匹配的行 .
假设:
table
=原始数据表,table2
=过滤数据表 .为什么不进行简单的查询:DELETE FROM table1 WHERE table1.name IN(SELECT name FROM table2)
如果你知道你希望从中删除的表可以做这样的事情 .
这是一个非常简单的方法来获得你需要做的事情 .