比较2个数据表有条件

Compare 2 data tables with a condition

我有一个DataTabledtA,有以下记录:

ColumnA  ColumnB
1001     ARCH
1001     ARCH
1002     CUSS
1003     ARCH

还有一个DataTabledtB记录如下:

ColumnA
ARCH
CUSS

我需要比较两个DataTables,如果dtB中有ARCH,则在dtA中搜索ARCH,当在 dtA 中首次出现 ARCH,停止进一步搜索并写入日志。

如果 ARCH 不存在于 dtA 中,则取 dtB 的第二条记录,即 CUSS,当 [=27= 第一次出现时] 在 dtA 中遇到,停止进一步搜索并写入日志。

我尝试使用 DataTable.Select() 方法,但未能成功。

请专家帮忙

编辑:

bool flag = true; 
for (int counter = 0; counter < dtB.Rows.Count; counter++) 
{ 
var contains = dtA.Select("ColumnB = '" + dtB.Rows[counter][0].ToString() + "'"); 
if (contains.Length == 0 && flag == true) 
{ 
dtLogs.Rows.Add("CostCode not present in the Excel");
 flag = false; 
break; 
} 
}

此致

您可以使用 HashSet 作为高效的查找集合,如果您不止一次需要它,我会使用它:

var lookup = new HashSet<string>(dtA.AsEnumerable().Select(r => r.Field<string>("ColumnB")));
foreach(DataRow row in dtB.Rows)
{
    string value = row.Field<string>("ColumnA");
    if(lookup.Contains(value))
    {
        // write to log
    }
}

您也可以使用 Enumerable.Contains,它需要更少的内存但更多的 CPU 周期:

var allBinA = dtA.AsEnumerable().Select(r => r.Field<string>("ColumnB"));
foreach (DataRow row in dtB.Rows)
{
    string value = row.Field<string>("ColumnA");
    if (allBinA.Contains(value))
    {
        // write to log
    }
}