//重现题目
 public ActionResult _showtitle(string chapterSectionId)
 {
     var id = Convert.ToInt32(chapterSectionId);
     LearningPlatformEntities lpfe = new LearningPlatformEntities();
     LearningViewModels lvm = new LearningViewModels();
     var uid = User.Identity.GetUserId();
     var userId = lpfe.AspNetUsers.Single(m => m.Id == uid).NewId;
     lvm.chapterSection = new List<ChapterSection>();
     lvm.singleSelections = new List<SingleSelections>();
     lvm.exerciseProblems = new List<ExerciseProblems>();
     lvm.exerciseSetTracking = new List<ExerciseSetTracking>();
     lvm.fillBlanks = new List<FillBlanks>();
     lvm.testProblems = new List<TestProblems>();
     lvm.testSetTracking = new List<TestSetTracking>();
     lvm.exerciseSet = new List<ExerciseSet>();
     lvm.testSet = new List<TestSet>();
     var cs = lpfe.ChapterSection.Single(m => m.Id == id);
     lvm.chapterSection.Add(cs);
     if (cs.SectionType == 1)
     {
         var es = lpfe.ExerciseSet.Where(m => m.theChapterSection == cs.Id).ToList();
         foreach (var ess in es)
         {
             switch (ess.SetType)
             {
                 case 1:
                     var temp1 = lpfe.ExerciseSetTracking.Where(m => m.theExerciseSet == ess.Id&m.theLearner==userId).ToList().Max(m => m.TryOrd);
                     var est1 = lpfe.ExerciseSetTracking.Single(m => m.theExerciseSet == ess.Id & m.TryOrd == temp1 & m.theLearner == userId);
                     var ep1 = lpfe.ExerciseProblems.Where(m => m.theExecriseSetTracking == est1.Id).ToList();
                     foreach (var epp in ep1)
                     {
                         var num1 = lpfe.SingleSelections.Count(m => m.Id == epp.ProblemOrd);
                         if (num1 > 0)
                         {
                             var ss = lpfe.SingleSelections.Single(m => m.Id == epp.ProblemOrd);
                             lvm.singleSelections.Add(ss);
                             lvm.exerciseProblems.Add(epp);
                         }
                     }
                     lvm.exerciseSetTracking.Add(est1);
                     break;
                 case 2:
                     var temp2 = lpfe.ExerciseSetTracking.Where(m => m.theExerciseSet == ess.Id & m.theLearner == userId).ToList().Max(m => m.TryOrd);
                     var est2 = lpfe.ExerciseSetTracking.Single(m => m.theExerciseSet == ess.Id & m.TryOrd == temp2 & m.theLearner == userId);
                     var ep2 = lpfe.ExerciseProblems.Where(m => m.theExecriseSetTracking == est2.Id).ToList();
                     foreach (var epp in ep2)
                     {
                         var num2 = lpfe.FillBlanks.Count(m => m.Id == epp.ProblemOrd);
                         if (num2 > 0)
                         {
                             var fb = lpfe.FillBlanks.Single(m => m.Id == epp.ProblemOrd);
                             lvm.fillBlanks.Add(fb);
                             lvm.exerciseProblems.Add(epp);
                         }
                     }
                     lvm.exerciseSetTracking.Add(est2);
                     break;
                 case 3: break;
                 case 4: break;
                 default: break;
             }
             lvm.exerciseSet.Add(ess);
         }
     }
     else
     {
         var ts = lpfe.TestSet.Where(m => m.theChapterSection == cs.Id).ToList();
         foreach (var tss in ts)
         {
             switch (tss.SetType)
             {
                 case 1:
                     var est1 = lpfe.TestSetTracking.Single(m => m.theTestSet == tss.Id&m.theLearner==userId);
                     var ep1 = lpfe.TestProblems.Where(m => m.theTestSetTracking == est1.Id).ToList();
                     foreach (var epp in ep1)
                     {
                         var num1 = lpfe.SingleSelections.Count(m => m.Id == epp.ProblemOrd);
                         if (num1 > 0)
                         {
                             var ss = lpfe.SingleSelections.Single(m => m.Id == epp.ProblemOrd);
                             lvm.singleSelections.Add(ss);
                             lvm.testProblems.Add(epp);
                         }
                     }
                     lvm.testSetTracking.Add(est1);
                     break;
                 case 2:
                     var est2 = lpfe.TestSetTracking.Single(m => m.theTestSet == tss.Id&m.theLearner==userId);
                     var ep2 = lpfe.TestProblems.Where(m => m.theTestSetTracking == est2.Id).ToList();
                     foreach (var epp in ep2)
                     {
                         var num2 = lpfe.FillBlanks.Count(m => m.Id == epp.ProblemOrd);
                         if (num2 > 0)
                         {
                             var fb = lpfe.FillBlanks.Single(m => m.Id == epp.ProblemOrd);
                             lvm.fillBlanks.Add(fb);
                             lvm.testProblems.Add(epp);
                         }
                     }
                     lvm.testSetTracking.Add(est2);
                     break;
                 case 3: break;
                 case 4: break;
                 default: break;
             }
             lvm.testSet.Add(tss);
         }
     }
     return View(lvm);
 }
        //获取题目
        public ActionResult _title(string chapterSectionId, string courseId, int ability)
        {
            LearningPlatformEntities lpe = new LearningPlatformEntities();

            //var uid = User.Identity.GetUserId();
            //var userId = lpe.AspNetUsers.Single<AspNetUsers>(m => m.Id == uid).NewId;
            //var ability = lpe.LearnerBookmarker.Single<LearnerBookmarker>(m => m.theLearner == userId).theLearnerAbility;
            LearningViewModels lvm = new LearningViewModels();
            lvm.chapterSection = new List<ChapterSection>();
            lvm.exerciseSet = new List<ExerciseSet>();
            lvm.testSet = new List<TestSet>();
            lvm.singleSelections = new List<SingleSelections>();
            lvm.fillBlanks = new List<FillBlanks>();
            lvm.programProblems = new List<ProgramProblems>();
            lvm.setCapacity = new List<SetCapacity>();
            var id = Convert.ToInt32(chapterSectionId);
            var cs = lpe.ChapterSection.Single(m => m.Id == id);
            lvm.chapterSection.Add(cs);
            if (cs.SectionType == 1)
            {
                var es = lpe.ExerciseSet.Where(m => m.theChapterSection == cs.Id).ToList();
                foreach (var exe in es)
                {
                    var capactiy = lpe.SetCapacity.Single(m => m.theExerciseSet == exe.Id && m.theLearnerAbility == ability);
                    var num = capactiy.Capacity;
                    switch (exe.SetType)
                    {
                        case 1:
                            var ssl = lpe.SingleSelections.Where(m => m.theSet == exe.Id && m.ForTest == 0).ToList();
                            {
                                int[] ord = NorepeatRandom.Random(ssl.Count);
                                for (int i = 0; i < num; i++)
                                {
                                    lvm.singleSelections.Add(ssl[ord[i]]);
                                }
                            }
                            break;
                        case 2:
                            var fbl = lpe.FillBlanks.Where(m => m.theSet == exe.Id && m.ForTest == 0).ToList();
                            {
                                int[] ord = NorepeatRandom.Random(fbl.Count);
                                for (int i = 0; i < num; i++)
                                {
                                    lvm.fillBlanks.Add(fbl[ord[i]]);
                                }
                            }
                            break;
                        case 3: break;
                        case 4:
                            var ppb = lpe.ProgramProblems.Where(m => m.theSet == exe.Id && m.ForTest == 0).ToList();
                            {
                                int[] ord = NorepeatRandom.Random(ppb.Count);
                                for (int i = 0; i < num; i++)
                                {
                                    lvm.programProblems.Add(ppb[ord[i]]);
                                }
                            }
                            break;
                    }
                    lvm.exerciseSet.Add(exe);
                }
            }
            else
            {
                var ts = lpe.TestSet.Where(m => m.theChapterSection == cs.Id).ToList();
                foreach (var tss in ts)
                {
                    var ssl = lpe.SingleSelections.Where(m => m.theSet == tss.Id && m.ForTest == 1).ToList();
                    {
                        foreach (var ss in ssl)
                        {
                            lvm.singleSelections.Add(ss);
                        }
                    }
                    var fbl = lpe.FillBlanks.Where(m => m.theSet == tss.Id && m.ForTest == 1).ToList();
                    {
                        foreach (var fb in fbl)
                        {
                            lvm.fillBlanks.Add(fb);
                        }
                    }
                    var ppb = lpe.ProgramProblems.Where(m => m.theSet == tss.Id && m.ForTest == 1).ToList();
                    {
                        foreach (var pp in ppb)
                        {
                            lvm.programProblems.Add(pp);
                        }
                    }
                    lvm.testSet.Add(tss);
                }
            }

            return View(lvm);
        }
        //
        // GET: /Learn/
        public ActionResult Learn(string Id="1")
        {
            int id = Convert.ToInt32(Id);
            LearningPlatformEntities lpfe = new LearningPlatformEntities();
            var uid = User.Identity.GetUserId();
            var userId = lpfe.AspNetUsers.Single<AspNetUsers>(m => m.Id == uid).NewId;

            var flag = lpfe.Order.Count(m => m.theUser == userId & m.theCourse == id & m.Orderstate == 1);
            if (flag == 1)
            {
                LearningViewModels lvm = new LearningViewModels();
                lvm.courseChapter = new List<CourseChapter>();
                lvm.chapterSection = new List<ChapterSection>();
                lvm.courses = new List<Course>();
                //获取该门课程的数据
                lvm.courses.Add(lpfe.Course.Single<Course>(m => m.Id == id));
                //获取课程下面的章和节
                var CourseChapter = lpfe.CourseChapter.Where<CourseChapter>(m => m.theCourse == id).ToList();
                foreach (var cc in CourseChapter)
                {
                    var result = lpfe.ChapterSection.Where<ChapterSection>(m => m.theCourseChapter == cc.Id).ToList();
                    foreach (var cs in result)
                    {
                        lvm.chapterSection.Add(cs);
                    }
                    lvm.courseChapter.Add(cc);
                }
                //var num = lpfe.ChapterLearning.Count(m => m.Id == id && m.theLearner == userId);
                //if (num > 0)
                //{
                //    var chapterLearning = lpfe.ChapterLearning.Single(m => m.Id == id && m.theLearner == userId);
                //    lvm.chapterLearning = chapterLearning.theChapter;
                //    var sectionLearning = lpfe.SectionLearning.Single(m => m.Id == id && m.theLearner == userId);
                //    lvm.sectionLearning = sectionLearning.theSection;
                //}
                //else
                //{
                //    lvm.chapterLearning = 1;
                //    lvm.sectionLearning = 1;
                //}
                var num = 0;
                var chapid = lpfe.CourseChapter.Where(m => m.theCourse == id).ToList();
                foreach (var chid in chapid)
                {
                    num = lpfe.ChapterLearning.Count(m => m.theLearner == userId & m.theChapter == chid.Id);
                    if (num == 1) { num = 1; break; }
                }
                if (num > 0)
                {
                    var chapterid = lpfe.ChapterLearning.Where(m => m.theLearner == userId).ToList();

                    foreach (var c in chapterid)
                    {
                        var cid = lpfe.CourseChapter.Single(m => m.Id == c.theChapter);
                        if (id == cid.theCourse)
                        {
                            lvm.chapterLearning = cid.SequenceType;
                            var sectionid = lpfe.SectionLearning.Where(m => m.theLearner == userId).ToList();
                            foreach (var st in sectionid)
                            {
                                var sid = lpfe.ChapterSection.Single(m => m.Id == st.theSection);
                                if (sid.theCourseChapter == cid.Id)
                                {
                                    lvm.sectionLearning = Convert.ToInt32(sid.SectionOrd);
                                }
                            }
                            num = 1;
                            break;
                        }
                        else
                        {
                            num = 0;
                        }
                    }
                }
                if(num<=0)
                {
                    var cl = lpfe.CourseChapter.Single(m => m.theCourse == id & m.SequenceType == 1);
                    var sl = lpfe.ChapterSection.Single(m => m.theCourseChapter == cl.Id & m.SectionOrd == "1");
                    lvm.chapterLearning = cl.SequenceType;
                    lvm.sectionLearning = Convert.ToInt32(sl.SectionOrd);
                }
                return View(lvm);
            }
            else
            {
                return Redirect("~/Payment/Index/" + Id);
            }
            //LearningPlatformEntities lpfe = new LearningPlatformEntities();
            //LearningViewModels lvm = new LearningViewModels();
            //lvm.courseChapter = new List<CourseChapter>();
            //lvm.chapterSection = new List<ChapterSection>();
            //lvm.courses = new List<Course>();
            //lvm.courses.Add(lpfe.Course.Single<Course>(m => m.Id == 1));

            //var CourseChapter = lpfe.CourseChapter.Where<CourseChapter>(m => m.theCourse==1).ToList();
            //foreach (var cc in CourseChapter)
            //{
            //    var result = lpfe.ChapterSection.Where<ChapterSection>(m => m.theCourseChapter == cc.Id).ToList();
            //    foreach (var cs in result)
            //    {
            //        lvm.chapterSection.Add(cs);
            //    }
            //    lvm.courseChapter.Add(cc);
            //}
            //var lbm = lpfe.LearnerBookmarker.Single(m => m.theCourse == 1);
            //if (lbm.theExerciseSet == null && lbm.theTestSet != null)
            //{
            //    var cChapter = lpfe.TestSet.Single(m => m.Id == lbm.theTestSet);
            //    var cSection = lpfe.ChapterSection.Single(m => m.Id == cChapter.theChapterSection);
            //    lvm.courseChap = cSection.theCourseChapter;
            //    lvm.chapterSec = Convert.ToInt32(cSection.SectionOrd.ToString());
            //}
            //else if (lbm.theExerciseSet != null && lbm.theTestSet == null)
            //{
            //    var cChapter = lpfe.ExerciseSet.Single(m => m.Id == lbm.theExerciseSet);
            //    var cSection = lpfe.ChapterSection.Single(m => m.Id == cChapter.theChapterSection);
            //    lvm.courseChap = cSection.theCourseChapter;
            //    lvm.chapterSec = Convert.ToInt32(cSection.SectionOrd.ToString().Trim());
            //}

            //return View(lvm);
        }