DataTable数据对比
程序开发
2023-09-13 11:11:38
DataTable数据对比
文章目录
前言
开发中我们经常会出现查询数据库后返回DataTable的情况,那么DataTable中常用的一些操作阁下又了解多少呢,例如:两个结构不同DataTable怎么找出他们俩之间的交集和差集。
一、计算DataTable差集
结构不同的情况
示例:这里的情况是我们要过滤掉老数据取到新数据,其中:
dt:是查询到的所有数据。
dt的数据:
oldData:里是已经处理过的数据,也就是需要从”dt“中剔除的数据。
oldData的数据:
示例代码如下:
DataTable dt = new DataTable();dt.Columns.Add("afsServiceOrder");dt.Columns.Add("OrderId");for (int i = 0; i < 5; i++){DataRow dr = dt.NewRow();dr["afsServiceOrder"] = i;dr["OrderId"] = "orderid" + i;dt.Rows.Add(dr);}DataTable oldData = new DataTable();oldData.Columns.Add("afsServiceOrder");DataRow dr1 = oldData.NewRow();dr1["afsServiceOrder"] = 2;oldData.Rows.Add(dr1);var WaiteData = from r in dt.AsEnumerable() where !(from rr in oldData.AsEnumerable() select rr.Field("afsServiceOrder")).Contains(r.Field("afsServiceOrder")) select r;dt = WaiteData.CopyToDataTable();foreach (DataRow item in dt.Rows){Console.WriteLine(item["afsServiceOrder"]);Console.WriteLine(item["OrderId"]);}
输出结果如下:
结构相同的情况
dt:是查询到的所有数据。
dt的数据:
oldData:里是已经处理过的数据,也就是需要从”dt“中剔除的数据。
oldData的数据:
var WaiteData = dt.AsEnumerable().Except(oldData.AsEnumerable(), DataRowComparer.Default);
输出的结果和上面是一样的
二、计算DataTable交集
结构不同的情况
示例:这里的情况是库存同步,需要找出新的库存数据和老的库存数据共有的商品库存信息然后进行Update操作。
var waitUpdata=from r in oldData.AsEnumerable() where (from rr in newData.AsEnumerable() select rr.Field("GoodsId ")).Contains( r.Field("GoodsId ")) select r;
newData:新的库存数据
这里newData的数据如下:
oldData:数据库老的库存数据
这里是oldData的数据如下:
这里过滤后得到的数据如下:
结构相同的情况
newData:新的库存数据
这里newData的数据如下:
oldData:数据库老的库存数据
这里oldData的数据如下:
var intersectUser = oldData.AsEnumerable().Intersect(newData, DataRowComparer.Default);
得到的结果:
三、计算DataTable的并集合
这中情况用到的并不多就不过多介绍了,
两个DaTable结构相同的情况计算并集
IEnumerable AllData = Data1.AsEnumerable().Union(Data2.AsEnumerable(), DataRowComparer.Default);
//转换为DataTable
DataTable Datas= AllData.CopyToDataTable();
标签:
上一篇:
移动端---左滑删除组件
下一篇:
相关文章
-
无相关信息