将 2 个数据表与条件进行比较

本文关键字:比较 条件 数据表 | 更新日期: 2023-09-27 18:37:17

我有一个DataTable dtA,有以下记录:

ColumnA  ColumnB
1001     ARCH
1001     ARCH
1002     CUSS
1003     ARCH

另一个DataTable dtB的记录如下:

ColumnA
ARCH
CUSS

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

如果dtA中不存在ARCH,则取dtB的第 2 条记录,即CUSS,当在dtA中遇到第一次出现CUSS时,进一步停止搜索并写入 Log。

我使用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; 
} 
}

问候

将 2 个数据表与条件进行比较

您可以使用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
    }
}

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

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
    }
}