两个datatable根据icd字段匹配,去除另一个字段不同的内容
时间: 2024-09-20 14:12:47 浏览: 40
将DataTable中的一行复制到另一个DataTable的方法
5星 · 资源好评率100%
在.NET DataTable中,如果你想要根据某个字段(如`ICD`字段)进行两个DataTable的匹配,并删除其中一个数据集中其他字段(假设是`OtherField`)与另一个数据集中该字段不同的记录,你可以通过以下步骤操作:
1. 创建一个新的DataTable或者一个临时的数据集来存储结果。
2. 遍历第一个DataTable(称为源DataTable),对于每个条目:
- 检查其`ICD`字段是否存在第二个DataTable(目标DataTable)中。
- 如果存在,比较`OtherField`的值。如果两者相等,则添加到结果集合中;如果不等,则忽略这条记录。
3. 将结果集合转换回DataTable或者直接填充到原始DataTable(取决于需求)。
下面是一个示例代码片段:
```csharp
DataTable result = new DataTable();
foreach (DataRow sourceRow in sourceDataTable.Rows)
{
string icdValue = sourceRow["ICD"].ToString();
if (targetDataTable.AsEnumerable().Any(row => row.Field<string>("ICD") == icdValue))
{
DataRow matchRow = targetDataTable.AsEnumerable()
.FirstOrDefault(row => row.Field<string>("ICD") == icdValue);
if (matchRow != null && matchRow.Field<string>("OtherField").Equals(sourceRow.Field<string>("OtherField")))
{
result.ImportRow(matchRow);
}
}
}
// 如果你想替换源DataTable的内容,只需赋值给它
sourceDataTable = result;
```
请注意,这个例子假设你的DataTable有索引或者`ICD`字段是唯一的,如果没有,性能可能会受到影响。如果`OtherField`不是字符串类型,你需要相应地调整字段访问和比较部分。
阅读全文