素材巴巴 > 程序开发 >

DataTable数据对比

程序开发 2023-09-13 11:11:38

DataTable数据对比

文章目录

  • 二、计算DataTable交集
  • 三、计算DataTable的并集合

  • 前言

    开发中我们经常会出现查询数据库后返回DataTable的情况,那么DataTable中常用的一些操作阁下又了解多少呢,例如:两个结构不同DataTable怎么找出他们俩之间的交集和差集。


    一、计算DataTable差集

    结构不同的情况

    示例:这里的情况是我们要过滤掉老数据取到新数据,其中:
    dt:是查询到的所有数据。
    dt的数据:

    afsServiceOrderOrderId0order01order12order23order34order4

    oldData:里是已经处理过的数据,也就是需要从”dt“中剔除的数据。
    oldData的数据:

    afsServiceOrder2

    示例代码如下:

    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的数据:

    afsServiceOrderOrderId0order01order12order23order34order4

    oldData:里是已经处理过的数据,也就是需要从”dt“中剔除的数据。
    oldData的数据:

    afsServiceOrderOrderId2order2
    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的数据如下:

    GoodsIdGoodsQty678812350

    oldData:数据库老的库存数据
    这里是oldData的数据如下:

    GoodsIdGoodsQtyGoodsName678812350测试商品189221190测试商品2ZH30202110测试商品3225641160测试商品4

    这里过滤后得到的数据如下:

    GoodsIdGoodsQtyGoodsName678812350测试商品1

    结构相同的情况

    newData:新的库存数据
    这里newData的数据如下:

    GoodsIdGoodsQty678812350

    oldData:数据库老的库存数据
    这里oldData的数据如下:

    GoodsIdGoodsQty67881235089221190ZH30202110225641160
    var intersectUser = oldData.AsEnumerable().Intersect(newData, DataRowComparer.Default);
     

    得到的结果:

    GoodsIdGoodsQtyGoodsName678812350测试商品1

    三、计算DataTable的并集合

    这中情况用到的并不多就不过多介绍了,

    两个DaTable结构相同的情况计算并集

    IEnumerable AllData = Data1.AsEnumerable().Union(Data2.AsEnumerable(), DataRowComparer.Default);
     //转换为DataTable
     DataTable Datas= AllData.CopyToDataTable();
     

    标签:

    上一篇: 移动端---左滑删除组件 下一篇:
    素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。