DataTabe(DataRow)之间比较求交集、并集、差集

// 首先要添加System.Data.DataSetExtensions;
DataSet ds  =   new  DataSet();
ds.Locale 
=  CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable contactTable 
=  ds.Tables[ " Contact " ];

//  Create two tables.
IEnumerable < DataRow >  query1  =  from contact  in  contactTable.AsEnumerable()
                              
where  contact.Field < string > ( " Title " ==   " Ms. "
                              select contact;

IEnumerable
< DataRow >  query2  =  from contact  in  contactTable.AsEnumerable()
                              
where  contact.Field < string > ( " FirstName " ==   " Sandra "
                              select contact;


DataTable contacts1 
=  query1.CopyToDataTable();
DataTable contacts2 
=  query2.CopyToDataTable();

//  Find the intersection of the two tables. 求交集用 Intersect/Union(并集)/Except(差集)
var contacts  =  contacts1.AsEnumerable().Intersect(contacts2.AsEnumerable(),
                                                    DataRowComparer.Default);

Console.WriteLine(
" Intersection of contacts tables " );
foreach  (DataRow row  in  contacts)
{
    Console.WriteLine(
" Id: {0} {1} {2} {3} " ,
        row[
" ContactID " ], row[ " Title " ], row[ " FirstName " ], row[ " LastName " ]);
}

 上面为MSDN的代码,下面为自己的代码,相对简洁些:

DbHelperSQL.connectionString  =  strSiteConnection;
DataTable dtblSiteTable 
=  DbHelperSQL.TQuery( " Select * From  "   +  strTableName);
IEnumerable
< DataRow >  querySite  =  from contact  in  dtblSiteTable.AsEnumerable() select contact;

DbHelperSQL.connectionString 
=  strMainConnection;
DataTable dtblMainTable 
=  DbHelperSQL.TQuery( " Select * From  "   +  strTableName);
IEnumerable
< DataRow >  queryMain  =  from contact  in  dtblMainTable.AsEnumerable() select contact;

var EnumerableExcept 
=  querySite.CopyToDataTable().AsEnumerable().Except(queryMain.CopyToDataTable().AsEnumerable(), DataRowComparer.Default);
 
DataTable dtblExcept 
=  EnumerableExcept.CopyToDataTable();   // dtblExcept 即为差异的数据表


转载于:https://www.cnblogs.com/zhangpengshou/archive/2010/06/30/1768384.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值