如何检测数据表是另一个数据表的一部分 [英] How to detect that a datatable is a part of another datatable

查看:107
本文介绍了如何检测数据表是另一个数据表的一部分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有两个数据表:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆