/// <summary> /// 获取所有答案列表 /// </summary> /// <param name="pager"></param> /// <param name="state"></param> /// <returns></returns> public async Task <Resp> GetAnswersList(Paginator pager, Answer.AnswerState state) { pager["state"] = ((int)state).ToString(); var answers = GetAnswers(AnswerSource.AllAnswersOfAdmin); var r = await answers.GetListAsync(pager); return(r); }
/// <summary> /// 获取答案列表分页 /// </summary> /// <param name="questionId"></param> /// <param name="index"></param> /// <param name="size"></param> /// <param name="answerState"></param> /// <returns></returns> internal async Task <(List <Answers.Results.AnswerItem>, int)> GetAnswersAsync(int questionId, int index, int size, Answer.AnswerState answerState = Answer.AnswerState.NoSelected) { Expression <Func <DB.Tables.Answer, bool> > whereStatement = a => a.QuestionId == questionId; if (answerState != Answer.AnswerState.NoSelected) { whereStatement = whereStatement.And(a => a.State == (int)answerState); } await using var db = new YGBContext(); int totalSize = await db.Answers.CountAsync(whereStatement); var list = await db.Answers.AsNoTracking() .Where(whereStatement) .OrderByDescending(a => a.Votes) .Skip((index - 1) * size) .Take(size) .Include(a => a.Answerer) .ThenInclude(a => a.Avatar) .Select(a => new Results.AnswerItem { Id = a.Id, Votes = a.Votes, Content = a.Content, CreateDate = a.CreateDate.ToStandardString(), State = Share.KeyValue <int, string> .Create(a.State, a.State.GetDescription <Answers.Answer.AnswerState>()), User = a.AnswererId.HasValue ? new Clients.Results.UserIntro { Id = a.Id, Account = a.Answerer.Name, Avatar = a.Answerer.Avatar.Thumbnail } : new Clients.Results.UserIntro { Id = 0, Account = a.NickName, Avatar = File.DEFAULT_AVATAR } }) .ToListAsync(); return(list, totalSize); }