利用DataTable的Compute进行汇总计算

//进度管理
            if (active == "initmaindatas")
            {
                #region 进度管理主表,参照initcontractdatas
                string offset = context.Request["offset"] + string.Empty;
                string limit = context.Request["limit"] + string.Empty;
                //string isInit = context.Request["isInit"].ToLower();
                int ioffset = StrHelper.ParseInt(offset, 0);
                int ipagesize = StrHelper.ParseInt(limit, 3);
                int ipageindex = ioffset / ipagesize;

                PagingHelper page = new PagingHelper();
                page.PageIndex = ipageindex;
                page.RowsInPage = ipagesize;

                //项目状态
                TreeListItem[] typeList = CommonTypeCache.ListCommonTypeByDefCode("5101014", false);

                #region 获取信息
                List<ProgressItem> resultList = new List<ProgressItem>();
                string connectionStr = DBUtil.ConnectionStr;
                //获取二级项目信息
                string strsql1 = string.Format(@" 
                SELECT P.NAME PRONAME,
                       P.ID,
                       P.INNER_CODE,
                       P.STATE,
                       P.CODE,
                       P.SIMPLE_NAME
                  FROM PROJECT_INFO     P
                 WHERE parent_id = '"+projectid+@"'  
                   AND LENGTH(P.INNER_CODE)=8 --获取二级工程 ");

                DataSet ds1 = DbHelper.ExecuteDataset(connectionStr, CommandType.Text, strsql1, null);
                DataTable dt1 = new DataTable();
                if (ds1 != null && ds1.Tables.Count > 0)
                {
                    dt1 = ds1.Tables[0];
                }

                //获取里程碑信息
                string strsql2 = @" 
                --子表:里程碑名称、计划完成时间、实际完成时间,取二级工程下分包合同 
                SELECT distinct T.TASK_NAME,
                        T.PLAN_END_TIME,
                        T.END_TIME,
                        T.PROJECT_ID,
                        P.NAME PRONAME,
                        P.STATE,
                        P.INNER_CODE,
                        C.ID,
                        C.PROJECT_ID
                FROM (SELECT SP.*
                        FROM PROJECT_INFO P, PROJECT_INFO SP
                       WHERE SP.INNER_CODE LIKE P.INNER_CODE || '%'  ) P,       
                    PROJECT_TASKPLAN T,
                    BASE_CONTRACT    C,
                    BASE_WBS         W
                WHERE P.ID = C.PROJECT_ID
                AND W.CONTRACT_ID = C.ID
                AND W.PROJECT_ID = T.PROJECT_ID
                AND W.CODE = T.WBS_CODE
                AND (T.TASK_TYPE = 'TT_Mile' OR T.TASK_TYPE = 'TT_FinMile')";

                DataSet ds2 = DbHelper.ExecuteDataset(connectionStr, CommandType.Text, strsql2, null);
                DataTable dt2 = new DataTable();
                if (ds2 != null && ds2.Tables.Count > 0)
                {
                    dt2 = ds2.Tables[0];
                }

                if (dt1 != null && dt1.Rows.Count > 0)
                {
                    //遍历项目信息
                    foreach (DataRow dr1 in dt1.Rows)
                    {
                        #region
                        ProgressItem item = new ProgressItem();
                        item.PROJECT_ID = dr1["ID"].ToString();
                        item.INNER_CODE = dr1["INNER_CODE"].ToString();
                        item.PRONAME = dr1["PRONAME"].ToString();
                        item.JDYJ = !string.IsNullOrEmpty(dr1["STATE"].ToString()) ? typeList.Where(t => t.Id == dr1["STATE"].ToString()).FirstOrDefault().Text : "";   //工程状态

                        //利用DataTable的Compute进行汇总
                        //object obj = dt2.Compute("sum(JHJE)", "PROJECT_ID = '" + item.PROJECT_ID + "' AND INNER_CODE like'" + item.INNER_CODE + "%'");
                        object PLAN_END_TIME = dt2.Compute("count(TASK_NAME)", "INNER_CODE  LIKE '" + dr1["INNER_CODE"].ToString() + "%'");
                        object END_TIME = dt2.Compute("count(TASK_NAME)", "END_TIME IS NOT NULL AND INNER_CODE  LIKE '" + dr1["INNER_CODE"].ToString() + "%'");

                        item.PLAN_END_TIME = PLAN_END_TIME == null ? "0" : PLAN_END_TIME.ToString();  //里程碑数量
                        item.END_TIME = END_TIME == null ? "0" : END_TIME.ToString();       //已完成数量
                        resultList.Add(item);
                        #endregion
                    }
                }
                #endregion

                List<ProgressItem> list = resultList.OrderBy(t => t.INNER_CODE).Skip((ipageindex) * ipagesize).Take(ipagesize).ToList();
                var FirtProjectId = list.FirstOrDefault().PROJECT_ID;

                PageResult<ProgressItem> result = new PageResult<ProgressItem>()
                {
                    pageindex = ipageindex,
                    rows = list,
                    total = resultList.Count
                };
                context.Response.Write((new JavaScriptSerializer()).Serialize(result));
                #endregion
            }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值