在一個大DataTable的基礎上去除重複數據,分別創建2個小DataTable,省去多次數據庫連接,提高效率,加快程序運行

            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;
                        }


                    }    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章