你认为这很简单,这不是一件简单的事吗?我想要做的就是删除一些重复的行。我显然可以将PK保存到一个单独的列表中,并通过迭代来删除行,这可能就是我最终要做的事情。我觉得这里似乎缺少一些明显的解决方案。
foreach (var v in FinalData.Visitors)
{
bool isDup = (AlreadyCommittedData.Visitors.Any(vdup => vdup.vid == v.vid));
if (isDup)
{
v.Delete();
}
}
两分钟后用谷歌搜索...我的第二次尝试就像是......
var vDup = new LMDB.VisitorsDataTable();
foreach (var v in FinalData.Visitors)
{
bool isDup = (AlreadyCommittedData.Visitors.Any(vdup => vdup.vid == v.vid));
if (isDup)
{
vDup.AddVisitorRow(v);
}
}
foreach (var v in vDup)
{
FinalData.Visitors.Remove(v);
}
我的第三次尝试是简单的暴力;)由于副本都在前面,它实际上可能表现得很好。
//仍在测试中,可能会有拼写错误,如果有,请忽略它。 bool allDone;
do
{
allDone = true;
foreach (var v in FinalData.Visitors)
{
bool isDup = (AlreadyCommittedData.Visitors.Any(vdup => vdup.vid == v.vid));
if (isDup)
{
v.Delete();
allDone = false;
break;
}
}
}
while (!allDone);
答案 0 :(得分:1)
我认为你的第二个选择是正确的。但是,该行可能永远不会同时在多个表中。声明vdup为列表<LMDB.VisitorsDataRow
&gt;。
答案 1 :(得分:1)
假设您有两个数据表(dtA和dtB),您希望获取A中尚未包含在B中的所有记录。为此,请将表A合并到表B中,如下所示:
dtB.Merge(dtA);
dtA = dtB.GetChanges(); // this will give you records unique to table A
// optional:
dtB.RejectChanges(); // restore dtB to its original state