public static void CheckExerciseGameRank(this ExerciseGameResult resultItem)
        {
            ThreadPool.QueueUserWorkItem(t =>
            {
                try
                {
                    using (var models = new ModelSource <UserProfile>())
                    {
                        var table = models.GetTable <ExerciseGameRank>();
                        var item  = table.Where(r => r.UID == resultItem.UID && r.ExerciseID == resultItem.ExerciseID).FirstOrDefault();
                        if (item == null)
                        {
                            item = new ExerciseGameRank
                            {
                                UID        = resultItem.UID,
                                ExerciseID = resultItem.ExerciseID,
                            };
                            table.InsertOnSubmit(item);
                        }

                        if (!item.RecordID.HasValue || item.ExerciseGameResult.TestDate < DateTime.Today.AddMonths(-3) || item.ExerciseGameResult.Score < resultItem.Score)
                        {
                            item.RecordID = resultItem.TestID;
                            models.SubmitChanges();

                            resultItem.ExerciseID.UpdateExerciseGameRank();
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                }
            });
        }
        public ActionResult CommitExerciseResult(ExerciseGameViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            var profile = HttpContext.GetUser();

            if (!viewModel.ExerciseID.HasValue)
            {
                ModelState.AddModelError("ExerciseID", "請選擇測驗項目!!");
            }

            if (!viewModel.Score.HasValue)
            {
                ModelState.AddModelError("Score", "請輸入純數字!!");
            }

            if (!viewModel.TestDate.HasValue)
            {
                ModelState.AddModelError("TestDate", "請選擇測驗日期!!");
            }

            if (!ModelState.IsValid)
            {
                ViewBag.ModelState = this.ModelState;
                return(View("~/Views/Shared/ReportInputError.ascx"));
            }

            ViewResult             result     = (ViewResult)EditExerciseResult(viewModel);
            ExerciseGameContestant contestant = result.Model as ExerciseGameContestant;

            if (contestant == null)
            {
                return(result);
            }

            if (contestant.Status != (int)Naming.GeneralStatus.Successful)
            {
                return(View("~/Views/Shared/JsAlert.cshtml", model: "參賽者已退賽!!"));
            }

            var item = new ExerciseGameResult
            {
                UID        = contestant.UID,
                Score      = viewModel.Score.Value,
                ExerciseID = viewModel.ExerciseID.Value,
                TestDate   = viewModel.TestDate.Value
            };

            models.GetTable <ExerciseGameResult>()
            .InsertOnSubmit(item);

            models.SubmitChanges();

            item.CheckExerciseGameRank();

            return(Json(new { result = true }));
        }