本文介绍了比较两个数据表,并选择未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在第二个表中的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-13 05:35