如何检测数据表是另一个数据表的一部分 [英] How to detect that a datatable is a part of another datatable
问题描述
如果我有两个数据表:
DT1 & DT2
如何检查,如果第一个包含了第二个,我的意思是 DT2
的相同的行是在 DT1
。
推荐答案
我的问题:?必须全部行的字段匹配与其他DataTable的同一行的字段的
您的回答:不只是ID的
您可以先检查两个数据表
为空或两者具有相同的行数。然后你可以使用LINQ来确定是否具有相同的ID使用 Enumerable.Except
:
You can first check if both DataTables
are null or both have the same row-count. Then you can use LINQ to determine if both have the same IDs using Enumerable.Except
:
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的不可以独特的,可能重复你需要检查所有的ID在DT1是否也DT2和DT2的所有ID都在DT1:
Edit: If the ID is not unique and might repeat you need to check whether all ID's in DT1 are also in DT2 and all IDs of DT2 are in 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一点点。你只需要知道,如果第一个表包含第二个,而不是相反。
Edit2: I've just seen that i've misunderstood your requiremnet a little bit. You only want to know if the first table contains the second, not vice-versa.
var DT2IdNotInDT1 = dt2IDs.Except(dt1IDs);
var equal = !DT2IdNotInDT1.Any();
这篇关于如何检测数据表是另一个数据表的一部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!