public ActionResult List()
        {
            using (var db = new XkSystem.Models.DbContext())
            {
                var vm = new Models.ElectiveOrgClass.List();

                vm.IsPermitClass        = db.Set <Entity.tbElectiveOrg>().Find(vm.ElectiveOrgId).IsPermitClass;
                vm.ElectiveOrgClassList = (from p in db.Table <Entity.tbElectiveClass>()
                                           join q in db.Table <Entity.tbElectiveOrgClass>().Where(d => d.tbElectiveOrg.Id == vm.ElectiveOrgId)
                                           on p.tbClass.Id equals q.tbClass.Id into temp
                                           from g in temp.DefaultIfEmpty()
                                           where p.tbElective.Id == vm.ElectiveId
                                           orderby p.tbClass.tbGrade.No, p.tbClass.tbGrade.GradeName, p.tbClass.No, p.tbClass.ClassName
                                           select new Dto.ElectiveOrgClass.List
                {
                    Id = p.tbClass.Id,
                    GradeName = p.tbClass.tbGrade.GradeName,
                    ClassName = p.tbClass.ClassName,
                    ClassTypeName = p.tbClass.tbClassType.ClassTypeName,
                    IsChecked = vm.IsPermitClass == false ? true : g.tbClass != null,
                    MaxLimit = g.tbClass != null ? g.MaxLimit : 999
                }).ToList();
                return(View(vm));
            }
        }
        public ActionResult List(Models.ElectiveOrgClass.List vm)
        {
            var error = new List <string>();

            using (var db = new XkSystem.Models.DbContext())
            {
                var ids = new List <int>();
                if (Request["CboxId"] != null)
                {
                    ids = Request["CboxId"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(d => d.ConvertToInt()).ToList();
                }

                var tb = (from p in db.Table <Entity.tbElectiveOrg>()
                          where p.Id == vm.ElectiveOrgId
                          select p).FirstOrDefault();
                if (tb != null)
                {
                    tb.IsPermitClass = vm.IsPermitClass;

                    var electiveOrgClass = (from p in db.Table <Entity.tbElectiveOrgClass>()
                                            .Include(d => d.tbClass)
                                            where p.tbElectiveOrg.Id == vm.ElectiveOrgId
                                            select p).ToList();
                    foreach (var a in electiveOrgClass.Where(d => ids.Contains(d.tbClass.Id) == false))
                    {
                        a.IsDeleted = true;
                    }


                    //获取当前默认学年Id

                    var yearId = Basis.Controllers.YearController.GetDefaultYearId(db);

                    //按班级获取已选课学员人数
                    var studentCount = (from p in db.Table <Entity.tbElectiveData>()
                                        join c in db.Table <Basis.Entity.tbClassStudent>() on p.tbStudent.Id equals c.tbStudent.Id
                                        where p.tbElectiveOrg.Id == vm.ElectiveOrgId &&
                                        c.tbClass.tbYear.Id == yearId
                                        group c by c.tbClass.Id into result
                                        select new
                    {
                        ClassId = result.Key,
                        StudentCount = result.Count()
                    }).ToList();
                    foreach (var a in electiveOrgClass.Where(d => ids.Contains(d.tbClass.Id)))
                    {
                        var maxLimit = Request["TxtMaxLimit" + a.tbClass.Id].ConvertToInt();

                        //修改限制班级最大人数时,判断已订课人数
                        var existsNum = studentCount.Where(p => p.ClassId == a.tbClass.Id).Select(p => p.StudentCount).FirstOrDefault();
                        if (maxLimit < existsNum)
                        {
                            error.Add($"{a.tbClass.ClassName}的最大人数:{maxLimit}不能小于当前班级已选课学员人数:{existsNum}!");
                            return(Code.MvcHelper.Post(error));
                        }
                        else
                        {
                            a.MaxLimit    = maxLimit;
                            a.RemainCount = maxLimit - existsNum;
                        }
                    }

                    //foreach (var a in electiveOrgClass.Where(d => ids.Contains(d.tbClass.Id)))
                    //{
                    //    var maxLimit = Request["TxtMaxLimit" + a.tbClass.Id].ConvertToInt();

                    //    //修改限制班级最大人数时,判断已订课人数
                    //    var existsNum = a.MaxLimit - a.RemainCount;
                    //    if (maxLimit < existsNum)
                    //    {
                    //        error.Add($"{a.tbClass.ClassName}的最大人数:{maxLimit}不能小于当前班级已选课学员人数:{existsNum}!");
                    //        return Code.MvcHelper.Post(error);
                    //    }
                    //    else
                    //    {
                    //        a.MaxLimit = maxLimit;
                    //        a.RemainCount = maxLimit - existsNum;
                    //    }
                    //}

                    var org           = db.Set <Entity.tbElectiveOrg>().Find(vm.ElectiveOrgId);
                    var electiveClass = (from p in db.Table <Entity.tbElectiveClass>()
                                         .Include(d => d.tbClass)
                                         where p.tbElective.Id == vm.ElectiveId
                                         select p).ToList();

                    foreach (var a in ids.Where(d => electiveOrgClass.Select(o => o.tbClass.Id).Contains(d) == false))
                    {
                        var limit = new Entity.tbElectiveOrgClass();
                        limit.tbElectiveOrg = org;
                        limit.tbClass       = electiveClass.Where(d => d.tbClass.Id == a).Select(d => d.tbClass).FirstOrDefault();
                        limit.MaxLimit      = Request["TxtMaxLimit" + a].ConvertToInt();
                        limit.RemainCount   = limit.MaxLimit;
                        db.Set <Entity.tbElectiveOrgClass>().Add(limit);
                    }

                    if (db.SaveChanges() > 0)
                    {
                        XkSystem.Areas.Sys.Controllers.SysUserLogController.Insert("修改了选课开班");
                    }
                }

                return(Code.MvcHelper.Post());
            }
        }