我有一个数据集DataSet中的DataTable dt1,其中包含列C1(PK)、C2和C3(唯一值)。在删除了一些行之后,我将执行AcceptChanges操作。我还有另一个DataTable dt2,其结构与dtA相同。我想删除dtA中存在于dtB中的行,这些行是根据C3(唯一值)进行比较的,并执行AcceptChanges操作。
我可以通过像下面这样使用Except(从here学到的)来实现非常接近但不符合要求:
这种方法的问题在于,我只得到了属于C3列的值列表。我可以像此处所示那样做更多的事情,但是我将会有一个新的DataTable,而不是仍然改变现有的dt1表。
我想到的第二种方法是像下面这样做:
在这里,一旦行被删除,我就会收到一个错误提示,说“此行已从表中删除,没有任何数据。” 我在这里遗漏了什么?
我也觉得可能有更好的方法来做这个,只是不知道 lol。
我可以通过像下面这样使用Except(从here学到的)来实现非常接近但不符合要求:
var a = dt1.AsEnumerable().Select(r => r.Field<Guid>("C3"));
var b = dt2.AsEnumerable().Select(r => r.Field<Guid>("C3"));
var c = a.Except(b);
这种方法的问题在于,我只得到了属于C3列的值列表。我可以像此处所示那样做更多的事情,但是我将会有一个新的DataTable,而不是仍然改变现有的dt1表。
我想到的第二种方法是像下面这样做:
foreach (DataRow r1 in ds1.Tables[0].Rows)
{
foreach(DataRow r2 in dt2.Rows)
{
if (r1.Field<Guid>("Guid1") == r2.Field<Guid>("Guid2"))
{
r1.Delete();
}
}
}
在这里,一旦行被删除,我就会收到一个错误提示,说“此行已从表中删除,没有任何数据。” 我在这里遗漏了什么?
我也觉得可能有更好的方法来做这个,只是不知道 lol。
AcceptChange
会完成这项工作。 - Sergey Berezovskiy