public ActionResult GetCountryGroundWaterAvailabilityForFutureUse() { List <WaterPredictionModel> dataSet = Session["CompleteResultList"] as List <WaterPredictionModel>; var storageForFuture = dataSet.GroupBy(st => st.NameOfState) .Select(x => new { NameOfState = x.First().NameOfState, NetGroundWaterAvailabilityForFutureUse = x.Sum(xt => xt.NetGroundWaterAvailabilityForFutureUse.HasValue ? (double?)Math.Round(xt.NetGroundWaterAvailabilityForFutureUse.Value) : 0) }).ToList(); double?totalStorageForCountry = 0; foreach (var stateGroundWaterAvailabilityForFutureUse in storageForFuture) { totalStorageForCountry += stateGroundWaterAvailabilityForFutureUse.NetGroundWaterAvailabilityForFutureUse; } PredictionManager predictionManager = new PredictionManager(); List <AvarageYearlyCountryStorage> resultList = predictionManager.GetYearlyStorage(totalStorageForCountry, storageForFuture.Count); JavaScriptSerializer serializer = new JavaScriptSerializer(); var resultJson = Json(serializer.Serialize(resultList), JsonRequestBehavior.AllowGet); return(resultJson); }