public void Add(ConstructTask consTask, string isWBSRelevance) { using (pm2Entities entities = new pm2Entities()) { (from m in entities.Bud_Task where m.TaskId == consTask.taskId select m).FirstOrDefault <Bud_Task>(); Bud_ConsReport report = (from m in entities.Bud_ConsReport where m.ConsReportId == consTask.reportId select m).FirstOrDefault <Bud_ConsReport>(); Bud_ConsTask task = new Bud_ConsTask { TaskId = consTask.taskId, ConsTaskId = consTask.Id, Note = consTask.Note, Bud_ConsReport = report, CompleteQuantity = consTask.CompleteQuantity, WorkContent = consTask.WorkContent }; entities.AddToBud_ConsTask(task); entities.SaveChanges(); if (isWBSRelevance == "1") { var list = (from m in entities.Bud_TaskResource where m.Bud_Task.TaskId == consTask.taskId select new { resourceId = m.Res_Resource.ResourceId, resourcePrice = m.ResourcePrice, resourceQuantity = m.ResourceQuantity }).ToList(); List <BudModifyTaskRes> first = (from mt in this.budModifyTaskSer join m in this.budModifySer on mt.ModifyId equals m.ModifyId join mtr in this.budModifyTaskResSer on mt.ModifyTaskId equals mtr.ModifyTaskId where (mt.TaskId == consTask.taskId) && (m.Flowstate == 1) select mtr).ToList <BudModifyTaskRes>(); List <BudModifyTaskRes> second = (from mt in this.budModifyTaskSer join m in this.budModifySer on mt.ModifyId equals m.ModifyId join mtr in this.budModifyTaskResSer on mt.ModifyTaskId equals mtr.ModifyTaskId where (mt.ModifyTaskId == consTask.taskId) && (m.Flowstate == 1) select mtr).ToList <BudModifyTaskRes>(); first = first.Union <BudModifyTaskRes>(second).ToList <BudModifyTaskRes>(); using (var enumerator = list.GetEnumerator()) { System.Func <BudModifyTaskRes, bool> predicate = null; while (enumerator.MoveNext()) { var resx = enumerator.Current; decimal num = 0M; decimal unitPrice = 0M; decimal num3 = 0M; if (resx.resourceQuantity.HasValue && resx.resourcePrice.HasValue) { num = resx.resourceQuantity.Value; num3 = num * resx.resourcePrice.Value; } if (predicate == null) { predicate = listx => listx.ResourceId == resx.resourceId; } foreach (BudModifyTaskRes res in first.Where <BudModifyTaskRes>(predicate).ToList <BudModifyTaskRes>()) { if (res != null) { num += res.ResourceQuantity; num3 += res.ResourcePrice * res.ResourceQuantity; first.Remove(res); } } if (num != 0M) { unitPrice = num3 / num; } ConstructResource consRes = ConstructResource.Create(Guid.NewGuid().ToString(), consTask.Id, resx.resourceId, 0M, unitPrice); consRes.Add(consRes); } } using (List <string> .Enumerator enumerator3 = this.budModifyTaskResSer.GetModifyTasResIds(first).GetEnumerator()) { System.Func <BudModifyTaskRes, bool> func2 = null; string resId; while (enumerator3.MoveNext()) { resId = enumerator3.Current; decimal num4 = 0M; decimal num5 = 0M; decimal num6 = 0M; if (func2 == null) { func2 = listx => listx.ResourceId == resId; } foreach (BudModifyTaskRes res2 in first.Where <BudModifyTaskRes>(func2).ToList <BudModifyTaskRes>()) { if (res2 != null) { num4 += res2.ResourceQuantity; num6 += res2.ResourcePrice * res2.ResourceQuantity; first.Remove(res2); } } if (num4 != 0M) { num5 = num6 / num4; } Resource.GetById(resId); ConstructResource resource2 = ConstructResource.Create(Guid.NewGuid().ToString(), consTask.Id, resId, 0M, num5); resource2.Add(resource2); } } } } }