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()); }
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()); }
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); }
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); } }