guqiang 1 сар өмнө
parent
commit
1cd76fa089

+ 7 - 0
src/Hotline.Application/Exam/Extensions/CollectionExtensions.cs

@@ -15,5 +15,12 @@ namespace Hotline.Application.Exam.Extensions
 
             return collection;
         }
+
+        public static bool IsNotNullOrEmpty<T>(this List<T> collection)
+        {
+            if (collection == null) return false;
+
+            return collection.Any();
+        }
     }
 }

+ 2 - 1
src/Hotline.Application/Exam/QueryExtensions/ExamManages/TagQuestionQueryExtensions.cs

@@ -1,5 +1,6 @@
 using Exam.Infrastructure.Web.Utilities;
 using Exam.Questions;
+using Hotline.Application.Exam.Extensions;
 using Hotline.Share.Requests.Exam;
 using JiebaNet.Segmenter.Common;
 using System.Linq.Expressions;
@@ -13,7 +14,7 @@ namespace Hotline.Application.Exam.QueryExtensions.ExamManages
             Expression<Func<QuestionTag, bool>> expression = m => m.Id != null;
 
             expression = ExpressionableUtility.CreateExpression<QuestionTag>()
-                .AndIF(tagQuestionRequest.TagIds.IsNotNull(), x => tagQuestionRequest.TagIds.Contains(x.TagId)).ToExpression();
+                .AndIF(tagQuestionRequest.TagIds.IsNotNullOrEmpty(), x => tagQuestionRequest.TagIds.Contains(x.TagId)).ToExpression();
 
             return expression;
         }

+ 4 - 3
src/Hotline.Application/Exam/QueryExtensions/Questions/QuestionQueryExtesions.cs

@@ -2,6 +2,7 @@
 using Exam.Infrastructure.Extensions;
 using Exam.Infrastructure.Web.Utilities;
 using Exam.Questions;
+using Hotline.Application.Exam.Extensions;
 using Hotline.Share.Requests.Question;
 using JiebaNet.Segmenter.Common;
 using SqlSugar;
@@ -25,7 +26,7 @@ namespace Hotline.Application.Exam.QueryExtensions.Questions
         {
             Expression<Func<QuestionTag, bool>> expression = m => m.Id != null;
 
-            expression = ExpressionableUtility.CreateExpression<QuestionTag>().AndIF(questionPagedRequest.TagIds.IsNotNull() && questionPagedRequest.TagIds.Any(), x => questionPagedRequest.TagIds.Contains(x.TagId))
+            expression = ExpressionableUtility.CreateExpression<QuestionTag>().AndIF(questionPagedRequest.TagIds.IsNotNullOrEmpty(), x => questionPagedRequest.TagIds.Contains(x.TagId))
             .ToExpression();
             return expression;
         }
@@ -35,7 +36,7 @@ namespace Hotline.Application.Exam.QueryExtensions.Questions
             Expression<Func<ExamTag, bool>> expression = m => m.Id != null;
 
             expression = ExpressionableUtility.CreateExpression<ExamTag>().
-            AndIF(questionPagedRequest.TagIds.IsNotNull() && questionPagedRequest.TagIds.Any(), x => questionPagedRequest.TagIds.Contains(x.Id))
+            AndIF(questionPagedRequest.TagIds.IsNotNullOrEmpty(), x => questionPagedRequest.TagIds.Contains(x.Id))
             .ToExpression();
 
             return expression;
@@ -46,7 +47,7 @@ namespace Hotline.Application.Exam.QueryExtensions.Questions
             Expression<Func<QuestionKnowladge, bool>> expression = m => m.Id != null;
 
             expression = ExpressionableUtility.CreateExpression<QuestionKnowladge>().
-            AndIF(questionPagedRequest.KnowladgeIds.IsNull(), x => questionPagedRequest.KnowladgeIds.Contains(x.QuestionId))
+            AndIF(questionPagedRequest.KnowladgeIds.IsNotNullOrEmpty(), x => questionPagedRequest.KnowladgeIds.Contains(x.QuestionId))
             .ToExpression();
 
             return expression;

+ 6 - 5
src/Hotline.Application/Exam/QueryExtensions/TestPapers/TestPaperQueryExtensions.cs

@@ -4,6 +4,7 @@ using Exam.Infrastructure.Extensions;
 using Exam.Infrastructure.Web.Utilities;
 using Exam.Questions;
 using Exam.TestPapers;
+using Hotline.Application.Exam.Extensions;
 using Hotline.Share.Enums.Exams;
 using Hotline.Share.Requests.TestPaper;
 using JiebaNet.Segmenter.Common;
@@ -34,7 +35,7 @@ namespace Hotline.Application.Exam.QueryExtensions.TestPapers
 
             expression = ExpressionableUtility.CreateExpression<TestPaperRule>()
                 .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.TestPaperId == entityQueryRequest.Id)
-                .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.TestPaperId))
+                .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.TestPaperId))
                 .ToExpression();
 
             return expression;
@@ -89,7 +90,7 @@ namespace Hotline.Application.Exam.QueryExtensions.TestPapers
             Expression<Func<QuestionTag, bool>> expression = m => m.Id != null;
 
             expression = ExpressionableUtility.CreateExpression<QuestionTag>()
-               .AndIF(tagQuestionCountRequest.TagIds.IsNotNull() && tagQuestionCountRequest.TagIds.Any(), x => tagQuestionCountRequest.TagIds.Contains(x.TagId))
+               .AndIF(tagQuestionCountRequest.TagIds.IsNotNullOrEmpty() && tagQuestionCountRequest.TagIds.Any(), x => tagQuestionCountRequest.TagIds.Contains(x.TagId))
                .ToExpression();
 
             return expression;
@@ -102,7 +103,7 @@ namespace Hotline.Application.Exam.QueryExtensions.TestPapers
             expression = ExpressionableUtility.CreateExpression<Question>()
                .AndIF(tagQuestionCountRequest.QuestionType.IsNotNull(), x => tagQuestionCountRequest.QuestionType ==x.QuestionType)
                .AndIF(tagQuestionCountRequest.DifficultyLevel.IsNotNull(),x=> tagQuestionCountRequest.DifficultyLevel == x.DifficultyLevel)
-               .AndIF(tagQuestionCountRequest.QuestionIds.IsNotNull() && tagQuestionCountRequest.QuestionIds.Any(), x => !tagQuestionCountRequest.QuestionIds.Contains(x.Id))
+               .AndIF(tagQuestionCountRequest.QuestionIds.IsNotNullOrEmpty(), x => !tagQuestionCountRequest.QuestionIds.Contains(x.Id))
                .ToExpression();
 
             return expression;
@@ -113,7 +114,7 @@ namespace Hotline.Application.Exam.QueryExtensions.TestPapers
             Expression<Func<QuestionTag, bool>> expression = m => m.Id != null;
 
             expression = ExpressionableUtility.CreateExpression<QuestionTag>()
-               .AndIF(testPaperQuestionRequest.TagIds.IsNotNull() && testPaperQuestionRequest.TagIds.Any(), x => testPaperQuestionRequest.TagIds.Contains(x.TagId))
+               .AndIF(testPaperQuestionRequest.TagIds.IsNotNullOrEmpty(), x => testPaperQuestionRequest.TagIds.Contains(x.TagId))
                .ToExpression();
 
             return expression;
@@ -126,7 +127,7 @@ namespace Hotline.Application.Exam.QueryExtensions.TestPapers
             expression = ExpressionableUtility.CreateExpression<Question>()
                .AndIF(testPaperQuestionRequest.QuestionType.IsNotNull(), x => testPaperQuestionRequest.QuestionType == x.QuestionType)
                .AndIF(testPaperQuestionRequest.DifficultyLevel.IsNotNull(), x => testPaperQuestionRequest.DifficultyLevel == x.DifficultyLevel)
-               .AndIF(testPaperQuestionRequest.QuestionIds.IsNotNull() && testPaperQuestionRequest.QuestionIds.Any(), x => !testPaperQuestionRequest.QuestionIds.Contains(x.Id))
+               .AndIF(testPaperQuestionRequest.QuestionIds.IsNotNullOrEmpty(), x => !testPaperQuestionRequest.QuestionIds.Contains(x.Id))
                .ToExpression();
 
             return expression;

+ 2 - 1
src/Hotline.Application/Exam/QueryExtensions/Trains/TrainPlanQueryExtensions.cs

@@ -1,6 +1,7 @@
 using Exam.Infrastructure.Extensions;
 using Exam.Infrastructure.Web.Utilities;
 using Exam.Trains;
+using Hotline.Application.Exam.Extensions;
 using Hotline.Exams.Trains;
 using Hotline.Share.Requests.Train;
 using JiebaNet.Segmenter.Common;
@@ -29,7 +30,7 @@ namespace Hotline.Application.Exam.QueryExtensions.Trains
             Expression<Func<TrainPlanTemplate, bool>> expression = m => m.Id != null;
 
             expression = ExpressionableUtility.CreateExpression<TrainPlanTemplate>()
-                .AndIF(trainPlanPagedRequest.TrainTemplateIds.IsNotNull(), x => trainPlanPagedRequest.TrainTemplateIds.Contains(x.TraimTemplateId))
+                .AndIF(trainPlanPagedRequest.TrainTemplateIds.IsNotNullOrEmpty(), x => trainPlanPagedRequest.TrainTemplateIds.Contains(x.TraimTemplateId))
                 .ToExpression();
 
             return expression;

+ 2 - 2
src/Hotline.Application/Exam/Service/ExamManages/ExamManageService.cs

@@ -215,14 +215,14 @@ namespace Hotline.Application.Exam.Service.ExamManages
 
             var tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<ExamQuestionScore>()
                 .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.ExamManageId == entityQueryRequest.Id)
-                .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.ExamManageId))
+                .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.ExamManageId))
                 .ToEntityQueryRequest<ExamQuestionScore>();
 
             await DeleteExamQuestionScores(tmpEntityQueryRequest, cancellationToken);
 
             tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<UserExam>()
                 .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.ExamId == entityQueryRequest.Id)
-                .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.ExamId))
+                .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.ExamId))
                 .ToEntityQueryRequest<UserExam>();
 
             await DeleteUserExam(tmpEntityQueryRequest, cancellationToken);

+ 2 - 2
src/Hotline.Application/Exam/Service/ExamManages/ExtractRuleService.cs

@@ -164,13 +164,13 @@ namespace Hotline.Application.Exam.Service.ExamManages
 
             var tempEntityQueryRequest = ExpressionableUtility.CreateExpression<TagQuestion>()
                 .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.RuleId == entityQueryRequest.Id)
-                .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.RuleId)).ToEntityQueryRequest<TagQuestion>();
+                .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.RuleId)).ToEntityQueryRequest<TagQuestion>();
 
             await DeleteTagQuestions(tempEntityQueryRequest, cancellationToken);
 
             tempEntityQueryRequest = ExpressionableUtility.CreateExpression<RuleTag>()
                 .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.RuleId == entityQueryRequest.Id)
-                .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.RuleId)).ToEntityQueryRequest<RuleTag>();
+                .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.RuleId)).ToEntityQueryRequest<RuleTag>();
 
 
             await DeleteRuleTags(tempEntityQueryRequest, cancellationToken);

+ 5 - 5
src/Hotline.Application/Exam/Service/Questions/QuestionService.cs

@@ -227,35 +227,35 @@ namespace Hotline.Application.Exam.Service.Questions
 
             var tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<QuestionTag>()
                 .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.QuestionId == entityQueryRequest.Id)
-                .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.QuestionId))
+                .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.QuestionId))
                 .ToEntityQueryRequest<QuestionTag>();
 
             await DeleteQuestionTags(tmpEntityQueryRequest, cancellationToken);
 
             tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<QuestionOptions>()
                 .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.QuestionId == entityQueryRequest.Id)
-                .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.QuestionId))
+                .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.QuestionId))
                 .ToEntityQueryRequest<QuestionOptions>();
 
             await DeleteQuestionOptions(tmpEntityQueryRequest, cancellationToken);
 
             tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<QuestionAnswer>()
                 .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.QuestionId == entityQueryRequest.Id)
-                .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.QuestionId))
+                .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.QuestionId))
                 .ToEntityQueryRequest<QuestionAnswer>();
 
             await DeleteQuestionAnswer(tmpEntityQueryRequest, cancellationToken);
 
             tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<QuestionKnowladge>()
                 .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.QuestionId == entityQueryRequest.Id)
-                .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.QuestionId))
+                .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.QuestionId))
                 .ToEntityQueryRequest<QuestionKnowladge>();
 
             await DeleteKnowladges(tmpEntityQueryRequest, cancellationToken);
 
             tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<QuestionSourceware>()
                 .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.QuestionId == entityQueryRequest.Id)
-                .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.QuestionId))
+                .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.QuestionId))
                 .ToEntityQueryRequest<QuestionSourceware>();
 
             await DeleteSourcewares(tmpEntityQueryRequest, cancellationToken);

+ 24 - 10
src/Hotline.Application/Exam/Service/TestPapers/TestPaperService.cs

@@ -239,13 +239,13 @@ namespace Hotline.Application.Exam.Service.TestPapers
 
             var tempEntityQueryRequest = ExpressionableUtility.CreateExpression<TestPaperItem>()
                .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.TestPaperId == entityQueryRequest.Id)
-               .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.TestPaperId)).ToEntityQueryRequest<TestPaperItem>();
+               .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.TestPaperId)).ToEntityQueryRequest<TestPaperItem>();
 
             await DeleteTestPaperItems(tempEntityQueryRequest, cancellationToken);
 
             tempEntityQueryRequest = ExpressionableUtility.CreateExpression<TestPaperRule>()
                 .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.TestPaperId == entityQueryRequest.Id)
-                .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.TestPaperId)).ToEntityQueryRequest<TestPaperRule>();
+                .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.TestPaperId)).ToEntityQueryRequest<TestPaperRule>();
 
 
             await DeleteTestPaperRules(tempEntityQueryRequest, cancellationToken);
@@ -442,7 +442,7 @@ namespace Hotline.Application.Exam.Service.TestPapers
             var entityQueryRequest = new EntityQueryRequest
             {
                 Expression = ExpressionableUtility.CreateExpression<TestPaperItemOptions>()
-                             .AndIF(questionIds.IsNotNull(), x => questionIds.Contains(x.QuestionId)).ToExpression()
+                             .AndIF(questionIds.IsNotNullOrEmpty(), x => questionIds.Contains(x.QuestionId)).ToExpression()
             };
 
             await DeleteTestPaperItemOptions(entityQueryRequest, cancellationToken);
@@ -465,7 +465,7 @@ namespace Hotline.Application.Exam.Service.TestPapers
             var entityQueryRequest = new EntityQueryRequest
             {
                 Expression = ExpressionableUtility.CreateExpression<TestPaperItemAnswer>()
-                             .AndIF(questionIds.IsNotNull(), x => questionIds.Contains(x.QuestionId)).ToExpression()
+                             .AndIF(questionIds.IsNotNullOrEmpty(), x => questionIds.Contains(x.QuestionId)).ToExpression()
             };
 
             await DeleteTestPaperItemAnswer(entityQueryRequest, cancellationToken);
@@ -886,6 +886,8 @@ namespace Hotline.Application.Exam.Service.TestPapers
 
                         testPaperItemOption.TestPaperItemId = testPaperItem?.Id;
 
+                        testPaperItemOption.QuestionOptionId = item.Id;
+
                         testPaperItemOption.ToInsert(_sessionContext);
 
                         testPaperItemOptions.Add(testPaperItemOption);
@@ -917,13 +919,15 @@ namespace Hotline.Application.Exam.Service.TestPapers
 
                 options.ForEach(item =>
                 {
-                    var testPaperItemOption = _mapper.Map<QuestionAnswer, TestPaperItemAnswer>(item);
+                    var testPaperItemAnswer = _mapper.Map<QuestionAnswer, TestPaperItemAnswer>(item);
+
+                    testPaperItemAnswer.TestPaperItemId = testPaperItem?.Id;
 
-                    testPaperItemOption.TestPaperItemId = testPaperItem?.Id;
+                    testPaperItemAnswer.QueswerAnswerId = item.Id;
 
-                    testPaperItemOption.ToInsert(_sessionContext);
+                    testPaperItemAnswer.ToInsert(_sessionContext);
 
-                    testPaperItemAnswers.Add(testPaperItemOption);
+                    testPaperItemAnswers.Add(testPaperItemAnswer);
                 });
             });
 
@@ -1016,7 +1020,7 @@ namespace Hotline.Application.Exam.Service.TestPapers
             var entityQueryRequest = new EntityQueryRequest
             {
                 Expression = ExpressionableUtility.CreateExpression<TestPaperItemSourceware>()
-                             .AndIF(questionIds.IsNotNull(), x => questionIds.Contains(x.QuestionId)).ToExpression()
+                             .AndIF(questionIds.IsNotNullOrEmpty(), x => questionIds.Contains(x.QuestionId)).ToExpression()
             };
 
             await DeleteTestPaperItemSourcewareAsync(entityQueryRequest, cancellationToken);
@@ -1038,7 +1042,7 @@ namespace Hotline.Application.Exam.Service.TestPapers
             var entityQueryRequest = new EntityQueryRequest
             {
                 Expression = ExpressionableUtility.CreateExpression<TestPaperItemKnowladge>()
-                             .AndIF(questionIds.IsNotNull(), x => questionIds.Contains(x.QuestionId)).ToExpression()
+                             .AndIF(questionIds.IsNotNullOrEmpty(), x => questionIds.Contains(x.QuestionId)).ToExpression()
             };
 
             await DeleteTestPaperItemKnowladgeAsync(entityQueryRequest, cancellationToken);
@@ -1064,6 +1068,11 @@ namespace Hotline.Application.Exam.Service.TestPapers
                   {
                       OneToManyIfExistsNoInsert = true
                   })
+                  .ThenInclude(x => x.TestPaperItemOptionses)
+                  .Include(x => x.TestPaperItems, new InsertNavOptions
+                  {
+                      OneToManyIfExistsNoInsert = true
+                  })
                   .ThenInclude(x => x.TestPaperItemKnowlagdes)
                   .Include(x => x.TestPaperItems, new InsertNavOptions
                   {
@@ -1083,6 +1092,11 @@ namespace Hotline.Application.Exam.Service.TestPapers
                  {
                      OneToManyInsertOrUpdate = true
                  })
+                 .ThenInclude(x => x.TestPaperItemOptionses)
+                 .Include(x => x.TestPaperItems, new UpdateNavOptions
+                 {
+                     OneToManyInsertOrUpdate = true
+                 })
                  .ThenInclude(x => x.TestPaperItemKnowlagdes)
                  .Include(x => x.TestPaperItems, new UpdateNavOptions
                  {

+ 2 - 2
src/Hotline.Application/Exam/Service/Trains/TrainPlanService.cs

@@ -129,14 +129,14 @@ namespace Hotline.Application.Exam.Service.Trains
 
             var tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<TrainPlanTemplate>()
                .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.TrainPlanId == entityQueryRequest.Id)
-               .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.TrainPlanId))
+               .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.TrainPlanId))
                .ToEntityQueryRequest<TrainPlanTemplate>();
 
             await DeleteTrainPlanTemplateAsync(tmpEntityQueryRequest, cancellationToken);
 
             tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<TrainRecord>()
                .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.TrainPlanId == entityQueryRequest.Id)
-               .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.TrainPlanId))
+               .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.TrainPlanId))
                .ToEntityQueryRequest<TrainRecord>();
 
             await DeleteTrainRecordsAsync(tmpEntityQueryRequest, cancellationToken);

+ 8 - 6
src/Hotline.Application/Exam/Service/Trains/TrainTemplateService.cs

@@ -181,14 +181,14 @@ namespace Hotline.Application.Exam.Service.Trains
 
             var tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<TrainKnowladge>()
                .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.TrainTemplateId == entityQueryRequest.Id)
-               .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.TrainTemplateId))
+               .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.TrainTemplateId))
                .ToEntityQueryRequest<TrainKnowladge>();
 
             await DeleteTrainKnowladgesAsync(tmpEntityQueryRequest, cancellationToken);
 
             tmpEntityQueryRequest = ExpressionableUtility.CreateExpression<TrainPractice>()
                .AndIF(entityQueryRequest.Id.IsNotNullOrEmpty(), x => x.TrainTemplateId == entityQueryRequest.Id)
-               .AndIF(entityQueryRequest.Ids.IsNotNull(), x => entityQueryRequest.Ids.Contains(x.TrainTemplateId))
+               .AndIF(entityQueryRequest.Ids.IsNotNullOrEmpty(), x => entityQueryRequest.Ids.Contains(x.TrainTemplateId))
                .ToEntityQueryRequest<TrainPractice>();
 
             await DeleteTrainPracticeAsync(tmpEntityQueryRequest, cancellationToken);
@@ -221,7 +221,7 @@ namespace Hotline.Application.Exam.Service.Trains
             var entityQueryRequest = new EntityQueryRequest
             {
                 Expression = ExpressionableUtility.CreateExpression<TrainPracticeOptions>()
-                             .AndIF(questionIds.IsNotNull(), x => questionIds.Contains(x.QuestionId)).ToExpression()
+                             .AndIF(questionIds.IsNotNullOrEmpty(), x => questionIds.Contains(x.QuestionId)).ToExpression()
             };
 
             await DeleteTrainPracticeOptionsAsync(entityQueryRequest, cancellationToken);
@@ -256,7 +256,7 @@ namespace Hotline.Application.Exam.Service.Trains
                     {
                         var trainPracticeSourceware = _mapper.Map<QuestionSourceware, TrainPracticeSourceware>(item);
 
-                        trainPracticeSourceware.ToInsert(_sessionContext);
+						trainPracticeSourceware.ToInsert(_sessionContext);
 
                         trainPracticeSourcewares.Add(trainPracticeSourceware);
                     });
@@ -315,7 +315,7 @@ namespace Hotline.Application.Exam.Service.Trains
             var entityQueryRequest = new EntityQueryRequest
             {
                 Expression = ExpressionableUtility.CreateExpression<TrainPracticeSourceware>()
-                             .AndIF(questionIds.IsNotNull(), x => questionIds.Contains(x.QuestionId)).ToExpression()
+                             .AndIF(questionIds.IsNotNullOrEmpty(), x => questionIds.Contains(x.QuestionId)).ToExpression()
             };
 
             await DeleteTrainPracticeSourcewareAsync(entityQueryRequest, cancellationToken);
@@ -337,7 +337,7 @@ namespace Hotline.Application.Exam.Service.Trains
             var entityQueryRequest = new EntityQueryRequest
             {
                 Expression = ExpressionableUtility.CreateExpression<TrainPracticeKnowladge>()
-                             .AndIF(questionIds.IsNotNull(), x => questionIds.Contains(x.QuestionId)).ToExpression()
+                             .AndIF(questionIds.IsNotNullOrEmpty(), x => questionIds.Contains(x.QuestionId)).ToExpression()
             };
 
             await DeleteTrainPracticeKnowladgeAsync(entityQueryRequest, cancellationToken);
@@ -374,6 +374,8 @@ namespace Hotline.Application.Exam.Service.Trains
 
                         trainPracticeOption.TrainPracticeId = trainPractice?.Id;
 
+                        trainPracticeOption.QuestionOptionId = item.Id;
+
                         trainPracticeOption.ToInsert(_sessionContext);
 
                         trainPracticeOptions.Add(trainPracticeOption);