通过DataTables循环查找差异

时间:2016-06-27 22:49:00

标签: c#

我看了这么久,我无法看到我在做什么。我试图在C#中遍历两个数据表,并在table2中构建一个项目列表,这些项目没有完全匹配或未包含在table1中。但是,我一直在获取table2项的完整列表。这是一个我无法看到的愚蠢的逻辑错误。谁能看到我在这里失踪的东西?

非常感谢。

string results = null;
foreach (DataRow row1 in table2.Rows)
{
    int x = 0;
    foreach (DataRow row2 in table1.Rows)
    {
        var array1 = row1.ItemArray;
        var array2 = row2.ItemArray;
        if (array1.SequenceEqual(array2))
        {
            x = 1;
            break; // get out of the loop and continue
        }
        else
        {
            continue;
        }
    }
    if (x == 0)
    {
        results = results + (row1["Drug"]);
    }
}

1 个答案:

答案 0 :(得分:0)

你的逻辑运作正常。这是使用您的逻辑的一个dotnet小提琴示例:https://dotnetfiddle.net/4KMQ0w

您的问题必须与两个表中的实际值有关。例如,您是否清楚所有数据类型在两个表中是相同的,没有long vs int或不同的字符串长度。如果你还需要打破" SequenceEqual"进入循环并手动对每个字段进行比较。

对代码的次要评论: 1. var array2 = row2.ItemArray;应该位于foreach之上。 2. continue虽然没有造成任何伤害,但却是多余的。 3.而不是int x = 0;使用bool found = false;或其他东西。

如果您想要一个更有效的整体算法进行比较,请考虑将table1加载到Dictionary中并在那里执行查找。如果你需要一个例子,请告诉我。

祝你好运。