c# - 通过某些列比较相同的 DataTable,将不匹配返回给 CopyToDataTable()
问题描述
我有两个数据表(列:ID、MODEL、POWER、CLASS):
表格1:
411 Audi 500 300
412 BMW 400 800
413 Lexus 200 700
表 2:
876 Audi 500 300
896 BMW 400 870
832 Lexus 200 700
874 Fiat 250 450
结果我需要得到(至少一个标准不匹配,不考虑ID):
412 BMW 400 800
896 BMW 400 870
我无法执行Except
,因为第一个数字在两个(4.. & 8..)之间不匹配。如果我在将两个数据表合并在一起之前进行查询:
var matched = from table1 in MainProcess.dt1.AsEnumerable()
join table2 in MainProcess.dt2.AsEnumerable()
on table1.Field<string>("MODEL") equals table2.Field<string>("MODEL")
where table1.Field<string>("POWER") != table2.Field<string>("POWER")
|| table1.Field<string>("CLASS") != table2.Field<string>("CLASS")
select table1;
return matched.CopyToDataTable();
结果我只得到一个结果412 BMW 400 800
。我试过了,.Count() > 1 && .Count() < 1
但也没有用。
解决这个问题的正确方法是什么?我想我需要在查询之前合并两个数据表?
解决方案
你是如此接近:
var matched = from table1 in MainProcess.dt1.AsEnumerable()
join table2 in MainProcess.dt2.AsEnumerable()
on table1.Field<string>("MODEL") equals table2.Field<string>("MODEL")
where table1.Field<string>("POWER") != table2.Field<string>("POWER")
|| table1.Field<string>("CLASS") != table2.Field<string>("CLASS")
select new { table1, table2 };
var result = matched.SelectMany(x => new[] { x.table1, x.table2 })
.CopyToDataTable();