static FetchRowsResult FetchRows(FetchRowsAsyncEventArgs e)
        {
            var queryable = GetIssueDataQueryable()
                            .SortBy(e.SortOrder, defaultUniqueSortPropertyName: "Id")
                            .Where(MakeFilterExpression(e.Filter));

            return(queryable
                   .Skip(e.Skip)
                   .Take(e.Take ?? 30)
                   .ToArray());
        }
示例#2
0
        static FetchRowsResult FetchRows(FetchRowsAsyncEventArgs e)
        {
            if (ReferenceEquals(e.Filter, null))
            {
                return(new FetchRowsResult(null, false));
            }
            var queryable = GetIssueDataQueryable().Where(MakeFilterExpression(e.Filter));

            return(queryable
                   .Skip(e.Skip)
                   .Take(42)
                   .ToArray());
        }
示例#3
0
        async Task <FetchRowsResult> FetchRowsAsync(FetchRowsAsyncEventArgs e)
        {
            IssueSortOrder sortOrder = IssuesHelper.GetIssueSortOrder(e);
            IssueFilter    filter    = IssuesHelper.MakeIssueFilter(e.Filter);
            const int      pageSize  = 30;
            var            issues    = await IssuesService.GetIssuesAsync(
                page : e.Skip / pageSize,
                pageSize : pageSize,
                sortOrder : sortOrder,
                filter : filter);

            return(new FetchRowsResult(issues, hasMoreRows: issues.Length == pageSize));
        }
        static async Task <FetchRowsResult> FetchRowsAsync(FetchRowsAsyncEventArgs e)
        {
            IssueSortOrder sortOrder = GetIssueSortOrder(e);
            IssueFilter    filter    = MakeIssueFilter(e.Filter);

            int take   = e.Take ?? 30;
            var issues = await IssuesService.GetIssuesAsync(
                skip : e.Skip,
                take : take,
                sortOrder : sortOrder,
                filter : filter);

            return(new FetchRowsResult(issues, hasMoreRows: issues.Length == take));
        }
 static IssueSortOrder GetIssueSortOrder(FetchRowsAsyncEventArgs e)
 {
     if (e.SortOrder.Length > 0)
     {
         var sort = e.SortOrder.Single();
         if (sort.PropertyName == "Created")
         {
             if (sort.Direction != ListSortDirection.Descending)
             {
                 throw new InvalidOperationException();
             }
             return(IssueSortOrder.CreatedDescending);
         }
         if (sort.PropertyName == "Votes")
         {
             return(sort.Direction == ListSortDirection.Ascending
                 ? IssueSortOrder.VotesAscending
                 : IssueSortOrder.VotesDescending);
         }
     }
     return(IssueSortOrder.Default);
 }
示例#6
0
        static async Task <FetchRowsResult> FetchRows(FetchRowsAsyncEventArgs e, Task <List <IssueData> > getSourceTask)
        {
            var enumerator = e.SkipToken as IEnumerator <IssueData>;

            if (enumerator == null)
            {
                var data = await getSourceTask;
                enumerator = Sort(data, e.SortOrder)
                             .Where(MakeFilterPredicate(e.Filter))
                             .GetEnumerator();
            }
            return(await Task.Run(() => {
                var result = new List <IssueData>();
                const int pageSize = 42;
                while (enumerator.MoveNext() && result.Count < pageSize)
                {
                    result.Add(enumerator.Current);
                }

                return new FetchRowsResult(result.ToArray(), hasMoreRows: result.Count == pageSize, nextSkipToken: enumerator);
            }));
        }
        static FetchRowsResult FetchRows(FetchRowsAsyncEventArgs e)
        {
            var filterWithSkipToken = CriteriaOperator.And(e.Filter, (CriteriaOperator)e.SkipToken);

            var converter        = new GridFilterCriteriaToExpressionConverter <IssueData>();
            var filterExpression = converter.Convert(filterWithSkipToken);

            const string defaultUniqueSortProperty = "Id";

            var context   = new IssuesContext();
            var queryable = IssueData.Select(context.Issues)
                            .SortBy(e.SortOrder, defaultUniqueSortPropertyName: defaultUniqueSortProperty)
                            .Where(filterExpression);

            var issues = queryable
                         .Take(e.Take ?? 30)
                         .ToArray();

            var nextSkipToken = SkipTokenHelper.MakeFilterSkipToken(e.SortOrder, defaultUniqueSortProperty, issues.LastOrDefault());

            return(new FetchRowsResult(issues, nextSkipToken: nextSkipToken));
        }
        static IssueSortOrder GetIssueSortOrder(FetchRowsAsyncEventArgs e)
        {
            if (e.SortOrder.Length == 0)
            {
                return(IssueSortOrder.Default);
            }
            var sort = e.SortOrder.Single();

            switch (sort.PropertyName)
            {
            case "Hot":
                if (sort.Direction != ListSortDirection.Descending)
                {
                    throw new InvalidOperationException();
                }
                return(IssueSortOrder.Hot);

            case "Week":
                if (sort.Direction != ListSortDirection.Descending)
                {
                    throw new InvalidOperationException();
                }
                return(IssueSortOrder.Week);

            case "Created":
                return(sort.Direction == ListSortDirection.Ascending
                        ? IssueSortOrder.CreatedAscending
                        : IssueSortOrder.CreatedDescending);

            case "Votes":
                return(sort.Direction == ListSortDirection.Ascending
                        ? IssueSortOrder.VotesAscending
                        : IssueSortOrder.VotesDescending);

            default:
                return(IssueSortOrder.Default);
            }
        }