public static Guid 随机生成试卷(取题条件 getProblemCondition, out int 试题充足情况)
        {
            试题充足情况 = 0;
            LoveKaoExamEntities db = new LoveKaoExamEntities();
            if (getProblemCondition.取题题型及数量集合.Count > 15)
            {
                throw new Exception("试卷题型不能超过15个!");
            }
            foreach (取题题型及数量 typeNum in getProblemCondition.取题题型及数量集合)
            {
                if (typeNum.数量 > 200)
                {
                    throw new Exception("每个题型下的题目不能超过200道!");
                }
            }
            试卷外部信息 outside = new 试卷外部信息();
            outside.ID = Guid.NewGuid();
            outside.爱考网ID = outside.ID;
            outside.创建人ID = 用户信息.CurrentUser.用户ID;
            outside.名称 = getProblemCondition.试卷名称;
            outside.说明 = "";
            outside.分类列表 = new List<string>();
            //给试卷内容赋值
            试卷内容 test = new 试卷内容();
            test.ID = Guid.NewGuid();
            test.名称 = getProblemCondition.试卷名称;
            test.说明 = "";
            test.提交人ID = outside.创建人ID;
            test.提交备注 = "";
            test.试卷外部信息ID = outside.ID;
            if (getProblemCondition.网站分类集合 == null || getProblemCondition.网站分类集合 == "")
            {
                throw new Exception("您还没选择分类,请先选择!");
            }
            if (getProblemCondition.网站分类集合 != null && getProblemCondition.网站分类集合 != "")
            {
                string[] sortList = getProblemCondition.网站分类集合.Split(",".ToCharArray());
                if (sortList.Length > 10)
                {
                    throw new Exception("分类选择不能超过10个!");
                }
                foreach (string sortName in sortList)
                {
                    outside.分类列表.Add(sortName);
                }
            }
            test.试卷中大题集合 = new List<试卷中大题>();
            decimal totalScore = 0;
            //遍历题型数量,并赋值
            for (int i = 0; i < getProblemCondition.取题题型及数量集合.Count; i++)
            {
                getProblemCondition.取题题型及数量集合[0] = getProblemCondition.取题题型及数量集合[i];
                List<试题外部信息表> listOutside = 试题外部信息.判断取题条件(getProblemCondition).ToList();
                totalScore += getProblemCondition.取题题型及数量集合[i].每小题分值 * getProblemCondition.取题题型及数量集合[i].数量;
                试卷中大题 type = new 试卷中大题();
                type.ID = Guid.NewGuid();
                type.名称 = getProblemCondition.取题题型及数量集合[i].题型名称;
                type.说明 = "";
                //随机取到的试题内容ID集合
                if (getProblemCondition.取题题型及数量集合[i].数量 != 0)
                {
                    List<Guid> listProblemId = 试题外部信息.随机取题(getProblemCondition.取题题型及数量集合[i].题型Enum,
                        getProblemCondition.取题题型及数量集合[i].数量, listOutside, 用户信息.CurrentUser.用户ID);
                    if (listProblemId.Count < getProblemCondition.取题题型及数量集合[i].数量)
                    {
                        试题充足情况 = 2;
                    }

                    type.试卷大题中试题集合 = new List<试卷大题中试题>();
                    //遍历题目数量,并赋值
                    for (int j = 0; j < listProblemId.Count; j++)
                    {

                        试卷大题中试题 testProblem = new 试卷大题中试题();
                        testProblem.ID = Guid.NewGuid();
                        testProblem.试题内容ID = listProblemId[j];
                        testProblem.每小题分值 = getProblemCondition.取题题型及数量集合[i].每小题分值;
                        testProblem.顺序 = Convert.ToByte(j);
                        type.试卷大题中试题集合.Add(testProblem);
                    }
                    //是复合题和多题干共选项题时给子集赋值
                    if (getProblemCondition.取题题型及数量集合[i].题型Enum > 39 && getProblemCondition.取题题型及数量集合[i].题型Enum < 50 ||
                        getProblemCondition.取题题型及数量集合[i].题型Enum == 80)
                    {
                        List<试题内容表> listSubContent = db.试题内容表.Where(a => listProblemId.Contains(a.父试题内容ID.Value)).ToList();
                        var groupSubContent = listSubContent.GroupBy(a => a.父试题内容ID).ToList();
                        foreach (试卷大题中试题 testProblem in type.试卷大题中试题集合)
                        {
                            testProblem.子小题集合 = new List<试卷大题中试题>();
                            var subContent = groupSubContent.Where(a => a.Key == testProblem.试题内容ID).First();
                            foreach (var sub in subContent)
                            {
                                试卷大题中试题 subTestProblem = new 试卷大题中试题();
                                subTestProblem.ID = Guid.NewGuid();
                                subTestProblem.每小题分值 = getProblemCondition.取题题型及数量集合[i].每小题分值 / subContent.Count();
                                subTestProblem.试题内容ID = sub.ID;
                                testProblem.子小题集合.Add(subTestProblem);
                            }
                        }
                    }
                }
                test.试卷中大题集合.Add(type);
            }
            test.总分 = Convert.ToInt32(totalScore);
            outside.当前试卷内容 = test;
            outside.试卷内容ID = test.ID;
            outside.总分 = Convert.ToInt32(totalScore);
            //加入缓存
            MemoryCache.Default.Add("" + outside.ID + "", outside, cacheRandomTest);
            if (试题充足情况 != 2)
            {
                试题充足情况 = 1;
            }
            return outside.ID;
        }
 /// <param name="类型">0保存本站试卷,1保存下载试卷</param>
 public static void 保存试卷相关信息(试卷内容 试卷内容, 试卷外部信息 试卷外部信息,int 类型)
 {
     LoveKaoExamEntities db = new LoveKaoExamEntities();
     List<string> listSort = 试卷外部信息.分类列表.ToList();
     if (类型 == 0)
     {
         listSort=所属分类.所属分类处理(listSort, 试卷外部信息.创建人ID, db);
     }
     else
     {
         所属分类.所属分类处理(listSort, 用户信息.CurrentUser.用户ID, db);
     }
     试卷外部信息表 testOutside = new 试卷外部信息表();
     testOutside.ID = 试卷内容.试卷外部信息ID;
     if (类型 == 0)
     {
         testOutside.创建人ID = 试卷内容.提交人ID;
     }
     else
     {
         testOutside.创建人ID = 用户信息.CurrentUser.用户ID;
     }
     testOutside.创建时间 = DateTime.Now;
     testOutside.最新更新时间 = DateTime.Now;
     testOutside.说明 = 试卷内容.说明;
     testOutside.试卷内容ID = 试卷内容.ID;
     testOutside.爱考网ID = 试卷外部信息.爱考网ID;
     testOutside.试卷类型 = 试卷外部信息.试卷类型;
     testOutside.名称 = 试卷内容.名称;
     testOutside.试卷状态Enum = 试卷外部信息.试卷状态Enum;
     //保存的是正常试卷,则计算总分,是草稿则不需计算
     if (试卷外部信息.试卷状态Enum == 0)
     {
         //计算试卷总分
         decimal totalScore =  试卷外部信息.计算试卷总分(试卷内容);
         testOutside.总分 = Convert.ToInt32(totalScore);
     }
     using (TransactionScope scope = new TransactionScope())
     {
         if (类型 == 0)
         {
             所属分类.添加相关信息所属分类(listSort, testOutside.创建人ID, testOutside.ID, 1, db);
         }
         else
         {
             所属分类.添加相关信息所属分类(listSort, 用户信息.CurrentUser.用户ID, testOutside.ID, 1, db);
         }
         db.试卷外部信息表.AddObject(testOutside);
         if (类型 == 0)
         {
             试卷内容.保存(db, 试卷内容.ID);
         }
         else
         {
             试卷内容.保存下载试卷(db, listSort);
         }
         scope.Complete();
     }
 }
 /// <summary>
 ///  因试卷大题中试题有无限循环,故无法用Mapper函数转化
 /// </summary>      
 private static LoveKaoServiceReference.试卷外部信息 把试卷外部信息转化成试卷外部信息WCF(试卷外部信息 outside)
 {
     LoveKaoServiceReference.试卷外部信息 outsideWCF = new LoveKaoServiceReference.试卷外部信息();
     outsideWCF.ID = outside.爱考网ID;
     outsideWCF.创建人ID = outside.创建人ID;
     outsideWCF.分类列表 = new List<LoveKaoServiceReference.所属分类>();
     foreach (string belongSort in outside.分类列表)
     {
         outsideWCF.分类列表.Add(所属分类.把所属分类转化为所属分类WCF(belongSort,outside.ID));
     }
     outsideWCF.名称 = outside.名称;
     outsideWCF.试卷内容ID = outside.试卷内容ID;
     outsideWCF.说明 = outside.说明;
     outsideWCF.总分 = outside.总分;
     return outsideWCF;
 }
 /// <summary>
 /// 因试卷大题中试题有无限循环,故无法用Mapper函数转化
 /// </summary>
 private static 试卷外部信息 把试卷外部信息WCF转化成试卷外部信息(LoveKaoServiceReference.试卷外部信息WCF outsideWCF)
 {
     试卷外部信息 outside = new 试卷外部信息();
     outside.ID = outsideWCF.ID;
     outside.创建人ID = outsideWCF.创建人ID;
     outside.分类列表 = new List<string>();
     foreach (LoveKaoServiceReference.所属分类 belongSort in outsideWCF.分类列表)
     {
         outside.分类列表.Add(所属分类.把所属分类WCF转化成所属分类(belongSort).分类名);
     }
     outside.名称 = outsideWCF.名称;
     outside.试卷内容ID = outsideWCF.试卷内容ID;
     outside.说明 = outsideWCF.说明;
     outside.总分 = outsideWCF.总分;
     return outside;
 }
 public static string 转化成完整Json字符串试题内容带答案(试卷内容 试卷内容, 试卷外部信息 试卷外部信息)
 {
     LoveKaoExamEntities db = new LoveKaoExamEntities();
     试卷内容 content = 给试卷内容中试题内容Json赋值(试卷内容, true);
     替换Json的扛(content);
     string 试卷内容Json字符串 = content.转化成Json字符串();
     string 试卷外部信息Json字符串 = 试卷外部信息.转化成Json字符串();
     string json = "{\"content\":" + 试卷内容Json字符串 + ",\"outside\":" + 试卷外部信息Json字符串 + "}";
     json = 还原Json的扛(json);
     json = json.Replace("\"试题内容Json\": \"", "\"试题内容Json\":");
     json = json.Replace("\\r\\n", "");
     json = json.Replace("\"outside\":null}\"", "\"outside\":null}");
     json = json.Replace("\"00000000-0000-0000-0000-000000000000\"", "null");
     return json;
 }
 public static string 转化成完整Json字符串试题内容不带答案(试卷内容 试卷内容, 试卷外部信息 试卷外部信息)
 {
     试卷内容 = 去掉试卷中的试题的答案(试卷内容);
     替换Json的扛(试卷内容);
     string 试卷内容Json字符串 = 试卷内容.转化成Json字符串();
     string 试卷外部信息Json字符串 = 试卷外部信息.转化成Json字符串();
     string json = "{\"content\":" + 试卷内容Json字符串 + ",\"outside\":" + 试卷外部信息Json字符串 + "}";
     json = 还原Json的扛(json);
     json = json.Replace("\"试题内容Json\": \"", "\"试题内容Json\":");
     json = json.Replace("\\r\\n", "");
     json = json.Replace("\\n", "");
     json = json.Replace("\\", "");
     json = json.Replace("\"outside\":null}\"", "\"outside\":null}");
     json = json.Replace("\"00000000-0000-0000-0000-000000000000\"", "null");
     return json;
 }