两个datatable匹配,ICD相同,但是ISCODE不同的内容 linq
时间: 2024-09-20 14:13:05 浏览: 36
当你需要使用 LINQ (Language Integrated Query) 来处理两个 DataTable 对象,并且只关注那些 ICD(国际疾病分类码)相同但 ISCODE(国际健康保健标准编码系统)不同的数据时,可以按照以下步骤操作:
1. 首先,你需要加载两个DataTable到 LINQ 可查询的数据源。这通常通过 `AsEnumerable()` 或 `AsQueryable()` 方法实现:
```csharp
var dt1 = new DataTable("Table1");
var dt2 = new DataTable("Table2");
var queryableDT1 = dt1.AsEnumerable();
var queryableDT2 = dt2.AsEnumerable();
```
2. 然后,你可以创建一个自定义的条件表达式,比如 `where` 子句,来筛选出 ICD 相同而 ISCODE 不同的行:
```csharp
var filter = from row1 in queryableDT1
join row2 in queryableDT2 on row1.Field<string>("ICD") equals row2.Field<string>("ICD")
where row1.Field<string>("ISCODE") != row2.Field<string>("ISCODE")
select new { Row1 = row1, Row2 = row2 };
```
这里假设 "ICD" 和 "ISCODE" 是 DataTable 中的列名。
3. 最后,你可以选择获取满足条件的行对,或者进一步处理这些行:
```csharp
foreach (var pair in filter)
{
Console.WriteLine($"ICD: {pair.Row1.Field<string>("ICD")} - Table1: {pair.Row1["ISCODE"]}, Table2: {pair.Row2["ISCODE"]}");
}
// 或者,如果你想将结果转换成新的 DataTable 或其他格式
var result = filter.ToDictionary(p => p.Row1.Field<string>("ICD"), p => new { Table1 = p.Row1, Table2 = p.Row2 });
```
阅读全文