本文介绍了比较两个数据表,并选择未present在第二个表中的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有两个数据表,我想选择第一个,不能在第二个present行
例如:
表A
id列
1 DATA1
2 DATA2
3 DATA3
4 DATA4表B
id列
DATA10 1
3 data30
我希望得到的结果是:
表C
id列
2 DATA2
4 DATA4
解决方案
您可以使用LINQ,尤其是 Enumerable.Except
有助于找到ID在表A不在表B
VAR idsNotInB = TableA.AsEnumerable()选择(R = GT; r.Field<&诠释GT;(ID))。
。除(TableB.AsEnumerable()选择(R =方式>&r.Field LT; INT>(ID)));
数据表表C =(从行TableA.AsEnumerable()
加入ID在idsNotInB
在row.Field< INT>(ID)等于ID
选择行).CopyToDataTable();
您也可以使用其中,
,但它会是低效率的:
DataTable的表C = TableA.AsEnumerable()
。凡(RA =>!TableB.AsEnumerable()
。任何(RB => rb.Field< INT>(ID)== ra.Field< INT>(ID)))
.CopyToDataTable();
I have two DataTables and I want to select the rows from the first one which are not present in second one
For example:
Table A id column 1 data1 2 data2 3 data3 4 data4 Table B id column 1 data10 3 data30
I want the result to be:
Table C id column 2 data2 4 data4
解决方案
You can use Linq, especially Enumerable.Except
helps to find id's in TableA that are not in TableB:
var idsNotInB = TableA.AsEnumerable().Select(r => r.Field<int>("id"))
.Except(TableB.AsEnumerable().Select(r => r.Field<int>("id")));
DataTable TableC = (from row in TableA.AsEnumerable()
join id in idsNotInB
on row.Field<int>("id") equals id
select row).CopyToDataTable();
You can also use Where
but it'll be less efficient:
DataTable TableC = TableA.AsEnumerable()
.Where(ra => !TableB.AsEnumerable()
.Any(rb => rb.Field<int>("id") == ra.Field<int>("id")))
.CopyToDataTable();
这篇关于比较两个数据表,并选择未present在第二个表中的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!