public void Test_QueryModel() { var item0 = new TestQueryModelItems { Description = "TEST1", ItemId = 1 }; var item1 = new TestQueryModelItems { Description = "TEST2", ItemId = 2 }; var model = new TestQueryModel { ServerGroupId = "Test", Items = new List <TestQueryModelItems> { item0, item1 } }; Dictionary <string, object> dictionary = new Dictionary <string, object>(); dictionary["ServerGroupId"] = model.ServerGroupId; dictionary["Items"] = model.Items; var dictionary1 = new Dictionary <string, string>(); dictionary1 = AlibabaCloud.OpenApiUtil.Client.Query(dictionary); Assert.Equal("Test", dictionary1["ServerGroupId"]); Assert.Equal("TEST1", dictionary1["Items.1.Description"]); Assert.Equal("1", dictionary1["Items.1.ItemId"]); Assert.Equal("TEST2", dictionary1["Items.2.Description"]); Assert.Equal("2", dictionary1["Items.2.ItemId"]); }
public async Task <ApiResult <TestQueryModel> > GetTestQuestionOptionAsync(GetTestQuestionOptionForEndUserByTestId filter) { TestQueryModel modeltest = null; try { if (_unit.Context.Tblusersubmitedanswer.Any(t => t.UserId == filter.CurrentUserId && t.TestId == filter.Filter.TestId.Value && t.IsMatched.HasValue)) { return(new ApiResult <TestQueryModel>(new ApiResultCode(ApiResultType.Error, messageText: "You have already done this test."))); } if (!_unit.Context.Tblusersubmitedanswer.Any(t => t.UserId == filter.CurrentUserId && t.TestId == filter.Filter.TestId.Value)) { var noofquestionAndCategoryId = await _unit.Context.Tbltest.Where(p => p.Id == filter.Filter.TestId.Value). Select(t => new { t.NoOfQuestion.Value, t.CategoryId }).FirstOrDefaultAsync(); var query = await(from t in _unit.Context.Tbltest join ttr in _unit.Context.Tbltestuserright on t.Id equals ttr.TestId join tcat in _unit.Context.Tblcategory on t.CategoryId equals tcat.Id join tq in _unit.Context.Tblquestion on tcat.Id equals tq.CategoryId join to in _unit.Context.Tblquestionoptions on tq.Id equals to.QuestionId where ttr.TestId == filter.Filter.TestId && ttr.UserId == filter.CurrentUserId.Value && ttr.Status == 1 && tq.Status == 1 && tq.CategoryId == noofquestionAndCategoryId.CategoryId.Value && t.CategoryId == noofquestionAndCategoryId.CategoryId.Value select new Tblusersubmitedanswer { TestId = ttr.TestId, UserId = ttr.UserId, QuestionId = tq.Id, OptionId = to.Id, InsertDate = DateTime.Now, LastUpdateDate = DateTime.Now }).ToListAsync(); var allAvailbleQuestionIds = query.Select(t => t.QuestionId.Value).Distinct(); int questioncout = allAvailbleQuestionIds.Count(); List <long> ids = new List <long>(); int number; if (noofquestionAndCategoryId.Value == questioncout) { ids.AddRange(allAvailbleQuestionIds); } else { for (int i = 0; i < noofquestionAndCategoryId.Value; i++) { do { number = new Random().Next(1, Convert.ToInt32(allAvailbleQuestionIds.Max())); } while (!allAvailbleQuestionIds.Contains(number) || ids.Contains(number)); //prevent duplicate number ids.Contains(number) ids.Add(number); } } var questionsquery = query.Where(t => ids.Contains(t.QuestionId.Value)).ToList(); questionsquery.ProduceShuffle(new Random()); _unit.Context.Tblusersubmitedanswer.AddRange(questionsquery); var saveresult = await _unit.SaveChangesAsync(); } var testquery = await _unit.Context.Tbltest.Where(p => p.Id == filter.Filter.TestId).Include(t => t.Tblusersubmitedanswer).ThenInclude(t => t.Question). ThenInclude(t => t.Tblquestionoptions).Include(t => t.Tbltestuserright).ThenInclude(t => t.User).FirstOrDefaultAsync(); if (testquery != null) { modeltest = new TestQueryModel(); modeltest.TestName = testquery.Name; modeltest.UserId = filter.CurrentUserId.Value; modeltest.UserName = testquery.Tblusersubmitedanswer.Where(t => t.UserId == filter.CurrentUserId).Select(t => (t.User.FirstName + " " + t.User.MiddleName + " " + t.User.LastName)).FirstOrDefault(); modeltest.TestId = testquery.Id; modeltest.Questions = testquery.Tblusersubmitedanswer.Where(t => t.UserId == filter.CurrentUserId).GroupBy(t => t.QuestionId).Select(q => new TestQuestionQueryModel { Question = q.FirstOrDefault().Question.Name, QuestionId = q.FirstOrDefault().Question.Id, TakeActionDuration = q.FirstOrDefault().Question.QuestionDuration.Value, Options = q.FirstOrDefault().Question.Tblusersubmitedanswer.Where(t => t.UserId == filter.CurrentUserId && t.QuestionId == q.FirstOrDefault().Question.Id). Select(t => new TestQuestionOptionsQueryModel { SubmmitedAnswerId = t.Id, OptionId = t.OptionId.Value, Option = t.Option.Name, }).ToList() }).Distinct().ToList(); return(new ApiResult <TestQueryModel>(new ApiResultCode(ApiResultType.Success), modeltest)); } return(new ApiResult <TestQueryModel>(new ApiResultCode(ApiResultType.Error, messageText: "no data found"))); } catch (Exception ex) { ErrorTrace.Logger(LogArea.RepositoryLayer, ex); return(new ApiResult <TestQueryModel>(new ApiResultCode(ApiResultType.Error, messageText: "Error while geting data"))); } }