如果我有两个数据表:
DT1 & DT2
如何检查第一个是否包含第二个,我的意思是DT2
中有相同的DT1
行。
答案 0 :(得分:3)
遍历表并比较字段(希望只是KID)。根据数据结构的结构,有很多方法可以做到这一点。
答案 1 :(得分:2)
我的问题:“所有行的字段必须与其他DataTable的同一行的字段匹配吗?”
你的回答:“不仅仅是id”
您可以先检查DataTables
是否为空,或两者都有相同的行数。然后,您可以使用LINQ来确定两者是否使用Enumerable.Except
具有相同的ID:
var dt1IDs = DT1.AsEnumerable().Select(r => r.Field<int>("id"));
var dt2IDs = DT2.AsEnumerable().Select(r => r.Field<int>("id"));
var diff = dt1IDs.Except(dt2IDs);
var equal = DT1.Rows.Count == DT2.Rows.Count && !diff.Any();
说明:当DT1中至少有一个ID不在DT2中时,diff.Any()
返回true。
修改:如果ID 不唯一且可能重复,则需要检查DT1中的所有ID是否也在DT2中,DT2的所有ID都在DT1中:
var DT1InDT2 = dt1IDs.Except(dt2IDs);
var DT2InDT1 = dt2IDs.Except(dt1IDs);
var equal = DT1.Rows.Count == DT2.Rows.Count && !DT1InDT2.Any() && !DT2InDT1.Any();
此查询无论如何都很有效。
Edit2 :我刚刚看到我误解了你的requiremnet。您只想知道第一个表是否包含第二个表,反之亦然。
var DT2IdNotInDT1 = dt2IDs.Except(dt1IDs);
var equal = !DT2IdNotInDT1.Any();
答案 2 :(得分:0)
您可以使用Intersect运算符
var intersect = DT2.AsEnumerable()。相交(DT1.AsEnumerable(), DataRowComparer.Default);