コード例 #1
0
        /// <summary>
        /// 获取与给定的 <see cref="ProblemSortKey"/> 值相对应的排序成员定义。
        /// </summary>
        /// <param name="key">排序键。</param>
        /// <returns>排序成员定义。</returns>
        /// <exception cref="ArgumentException">给定的 <see cref="ProblemSortKey"/> 值无效。</exception>
        public static FieldDefinition <Problem> GetField(this ProblemSortKey key)
        {
            LambdaExpression selector;

            switch (key)
            {
            case ProblemSortKey.ArchiveId:
                selector = (Expression <Func <Problem, int?> >)(p => p.ArchiveId);
                break;

            case ProblemSortKey.CreationTime:
                selector = (Expression <Func <Problem, DateTime> >)(p => p.CreationTime);
                break;

            case ProblemSortKey.LastUpdateTime:
                selector = (Expression <Func <Problem, DateTime> >)(p => p.LastUpdateTime);
                break;

            case ProblemSortKey.Difficulty:
                selector = (Expression <Func <Problem, int> >)(p => p.Difficulty);
                break;

            case ProblemSortKey.TotalSubmissions:
                selector = (Expression <Func <Problem, int> >)(p => p.TotalSubmissions);
                break;

            case ProblemSortKey.AcceptedSubmissions:
                selector = (Expression <Func <Problem, int> >)(p => p.AcceptedSubmissions);
                break;

            case ProblemSortKey.TotalAttemptedUsers:
                selector = (Expression <Func <Problem, int> >)(p => p.TotalAttemptedUsers);
                break;

            case ProblemSortKey.TotalSolvedUsers:
                selector = (Expression <Func <Problem, int> >)(p => p.TotalSolvedUsers);
                break;

            case ProblemSortKey.LastSubmissionTime:
                selector = (Expression <Func <Problem, DateTime> >)(p => p.LastSubmissionTime);
                break;

            default:
                throw new ArgumentException("Invalid sort key for problems: " + key, nameof(key));
            }

            return(new ExpressionFieldDefinition <Problem>(selector));
        }
コード例 #2
0
ファイル: ArchiveController.cs プロジェクト: BITICPC/BitWaves
        public async Task <PaginatedListActionResult <ProblemListInfo> > GetProblemList(
            [FromQuery] ProblemSortKey by = ProblemSortKey.ArchiveId,
            [FromQuery] bool descend      = false,
            [FromQuery][Page] int page    = 0,
            [FromQuery][ItemsPerPage] int itemsPerPage = 20)
        {
            var findPipeline = new ProblemFindPipeline(new ProblemFilterBuilder().InArchive(true))
            {
                SortKey          = by,
                SortByDescending = descend,
                Pagination       = new Pagination(page, itemsPerPage)
            };
            var findResult = await _repo.Problems.FindManyAsync(findPipeline);

            var models = findResult.ResultSet.Select(p => _mapper.Map <Problem, ProblemListInfo>(p));

            return(findResult.TotalCount, models);
        }
コード例 #3
0
        public async Task <PaginatedListActionResult <ProblemListInfo> > GetProblems(
            [FromQuery] ProblemSortKey by = ProblemSortKey.CreationTime,
            [FromQuery] bool descend      = true,
            [FromQuery][Range(0, int.MaxValue)] int page         = 0,
            [FromQuery][Range(1, int.MaxValue)] int itemsPerPage = 20)
        {
            var findPipeline = new ProblemFindPipeline(ProblemFilterBuilder.Empty)
            {
                SortKey          = by,
                SortByDescending = descend,
                Pagination       = new Pagination(page, itemsPerPage)
            };

            var findResult = await _repo.Problems.FindManyAsync(findPipeline);

            var models = findResult.ResultSet.Select(e => _mapper.Map <Problem, ProblemListInfo>(e));

            return(findResult.TotalCount, models);
        }