在一个大DataTable的基础上去除重复数据,分别创建2个小DataTable,省去多次数据库连接,提高效率,加快程序运行

本文介绍了一种使用C#进行DataTable操作的方法,包括从数据库获取数据并进行筛选、排序等处理过程。通过具体示例展示了如何根据特定字段创建新的数据表以及如何将数据转换为泛型列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

            DataTable tab = new DataTable();

          tab = DBUtil.GetDataSet(strCmd, "TESTA.V_YHJ_VIP_WX_XSMX").Tables[0];

创建一个小表:

                DataView view = new DataView(tab);


                DataTable orderTable = view.ToTable(true, "ORDERDATE", "MEMBER_CODE", "INV_NUM", "ZJE", "ZFJE", "SELL_QTY", "SHOP_CODE"); 

在基于orderTable 的str_Inv_Num ,生成更小的一个表

                    for (int i = 0; i < orderTable.Rows.Count; i++)
                    {
                        for (int j = 0; j < orderTable.Columns.Count; j++)
                        {
                            if (j == 0)
                            {
                                str_INV_DATE = orderTable.Rows[i][j].ToString().Trim();
                                //shop_code = tab.Rows[i][j].ToString();
                            }
                            if (j == 1)
                                str_MemberCode = orderTable.Rows[i][j].ToString().Trim();
                            if (j == 2)
                            {
                                str_Inv_Num = orderTable.Rows[i][j].ToString().Trim();
                                subInv_Num = str_Inv_Num;
                            }
                            if (j == 3)
                                Inv_Totalamt = Convert.ToInt32(orderTable.Rows[i][j].ToString().Trim());
                            if (j == 4)
                                str_INV_AMT = Convert.ToInt32(orderTable.Rows[i][j].ToString().Trim());
                            if (j == 5)
                                int_Sell_Qty = Convert.ToInt32(orderTable.Rows[i][j].ToString().Trim());
                            if (j == 6)
                                str_Shop_Code = tab.Rows[i][j].ToString().Trim();
                        }


                        if (str_old_Inv_Num.Trim()!=str_Inv_Num.Trim()) //去除某个会员有2个以上单据,并且每个单据有多件销售货品时的重复记录。目前第一个单号的第一件货品,就会把货品信息都列出来,如果一个单子有多件货品,不加此句就会出现重复数据。导致结果不对。
                        {
                            view.RowFilter = "INV_NUM='" + str_Inv_Num+"'";
                            orderDetailTable = view.ToTable(true, "INV_NUM", "SKU", "C_SHORT_DE", "SELL_QTY", "SERIAL_NO");


                            List<CofflineOrderDetail> lCofflineOrderDetail = DBUtil.GetList<CofflineOrderDetail>(orderDetailTable);//返回泛型列表
                            //OracleAccess.logger.Debug(" CAL_getOfflineOrder 子 table :" + str_vip.ToString() + DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString() +
                            //    "," + str_INV_DATE + "," + str_MemberCode + "," + str_Inv_Num + "," + Inv_Totalamt + "," + str_INV_AMT + "," + int_Sell_Qty + "," + str_Shop_Code +
                            //     DBUtil.ToJson(subtab));
                            listorder.Add(new COfflineOrder(str_INV_DATE, str_MemberCode, str_Inv_Num, Inv_Totalamt, str_INV_AMT, str_Shop_Code, int_Sell_Qty, lCofflineOrderDetail));
                            view.RowFilter = "";
                            str_old_Inv_Num = str_Inv_Num;
                        }


                    }    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值