将 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;
}
}
问候
您可以使用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
}
}