C# 如何检测一个数据表是另一个数据表的一部分

C# 如何检测一个数据表是另一个数据表的一部分,c#,asp.net,.net,linq,datatable,C#,Asp.net,.net,Linq,Datatable,如果我有两个数据表: DT1 & DT2 如何检查第一行是否包含第二行,我的意思是DT2的相同行在DT1循环表和comapare字段中(希望只是ID)。根据数据表的结构,有很多方法可以实现这一点。循环表和comapare字段(希望只有ID)。根据数据表的结构,有很多方法可以做到这一点。您可以使用Intersect运算符 var intersect=DT2.aseneumerable().intersect(DT1.aseneumerable(), DataRowComparer.Def

如果我有两个数据表:

DT1 & DT2

如何检查第一行是否包含第二行,我的意思是
DT2
的相同行在
DT1

循环表和comapare字段中(希望只是ID)。根据数据表的结构,有很多方法可以实现这一点。

循环表和comapare字段(希望只有ID)。根据数据表的结构,有很多方法可以做到这一点。

您可以使用Intersect运算符

var intersect=DT2.aseneumerable().intersect(DT1.aseneumerable(),
DataRowComparer.Default)

可以使用Intersect运算符

var intersect=DT2.aseneumerable().intersect(DT1.aseneumerable(),
DataRowComparer.Default)

我的问题:“所有行的字段必须与另一个数据表的同一行的字段匹配吗?”

你的回答:“不,只是身份证”

您可以首先检查
数据表
是否都为空,或者都具有相同的行计数。然后,您可以使用LINQ来确定两者是否具有相同的ID,方法是:

无论如何,这个查询是有效的


Edit2:我刚刚发现我有点误解了你的要求。您只想知道第一个表是否包含第二个表,反之亦然

var DT2IdNotInDT1 = dt2IDs.Except(dt1IDs);
var equal = !DT2IdNotInDT1.Any();

我的问题:“所有行的字段必须与另一个DataTable的同一行的字段匹配吗?”

你的回答:“不,只是身份证”

您可以首先检查
数据表
是否都为空,或者都具有相同的行计数。然后,您可以使用LINQ来确定两者是否具有相同的ID,方法是:

无论如何,这个查询是有效的


Edit2:我刚刚发现我有点误解了你的要求。您只想知道第一个表是否包含第二个表,反之亦然

var DT2IdNotInDT1 = dt2IDs.Except(dt1IDs);
var equal = !DT2IdNotInDT1.Any();


所有行的字段必须与另一个DataTable的相同(主键是什么?)行的字段匹配吗?这篇文章与asp.net或linq无关。是否要解释比较两个数据表中的数据与linq或asp.net之间的关系?换句话说。您认为无论您是否使用linq,或者UI是网页还是富客户端,这种方法会改变吗?下面的链接@JasonMeckley中已经讨论了这一点:非常感谢,但当我坚持要放置
linq
asp.net
标记时,我有一个理由。请看一下答案。所有行的字段必须与另一个数据表的相同(主键是什么?)行的字段匹配吗?这篇文章与asp.net或linq无关。请解释一下比较两个数据表中的数据与linq或asp.net有何关系?换句话说。您认为无论您是否使用linq,或者UI是网页还是富客户端,这种方法会改变吗?下面的链接@JasonMeckley中已经讨论了这一点:非常感谢,但当我坚持要放置
linq
asp.net
标记时,我有一个理由。你能看一下答案吗?嗯,但这太多了!如果你写问题的时间比你写问题的时间长,那你就错了!!嗯,但这太多了!如果你写问题的时间比你写问题的时间长,那你就错了!!你需要的不仅仅是那一行,不是吗?你需要的不仅仅是那一行,不是吗?我尝试了第一个ID(200300146)第二个ID(200300),所以它应该返回true而不是false,但它返回
false
否ID是唯一的,但我应该只依赖差异吗??请检查以上内容comment@just_name:当然,它返回false,因为第一个表有3条记录,而第二个表只有两条记录。那么我应该只依赖diff,因为我的问题是检查第一个数据表是否包含整个第二个数据表one@just_name当前位置我刚刚看到我有点误解了你的要求。您只想知道第一个表是否包含第二个表,反之亦然。请稍等,我将编辑我的答案。我尝试使用第一个ID(200300146)和第二个ID(200300),因此它应该返回true而不是false,但它返回
false
否ID是唯一的,但我是否应该仅依赖差异??请检查以上内容comment@just_name:当然,它返回false,因为第一个表有3条记录,而第二个表只有两条记录。那么我应该只依赖diff,因为我的问题是检查第一个数据表是否包含整个第二个数据表one@just_name当前位置我刚刚看到我有点误解了你的要求。您只想知道第一个表是否包含第二个表,反之亦然。等一下,我来编辑我的答案。
var DT2IdNotInDT1 = dt2IDs.Except(dt1IDs);
var equal = !DT2IdNotInDT1.Any();