I am retrieving an ordered IQueryable<Item>
from another method (QueryItems
). I would like to (conditionally) reverse the order of IQueryable<Item>
before it is passed on.
public async Task<PagedList<Item>> GetItems(FilterParameters filterParameters)
{
var items = QueryItems(filterParameters)
if (filterParams.Descending)
{
//do something to reverse the order of the IQueryable
}
return await PagedList<Item>
.CreateAsync(items, filterParams.PageNumber, filterParams.PageSize)
}
I cannot do var reversed = items.ToList().Reverse; items = reversed.AsQueryable()
because then it (apparently) cannot be used in asynchronous tasks.
When I try to do items = items.Reverse()
I get the following error:
System.NotImplementedException: Remotion.Linq.Clauses.ResultOperators.ReverseResultOperator
Mostly because I'm lazy, I'd rather not go into the QueryItems
method to implement items.OrderByDescending()
as that would require a bunch of if/else statements.
So... how do you reverse the order of an IQueryable?
Edit - Inclde PagedList.CreateAsync(...)
public class PagedList<T> : List<T>
{
public int CurrentPage { get; set; }
public int TotalPages { get; set; }
public int PageSize { get; set; }
public int TotalCount { get; set; }
public PagedList(List<T> items, int count, int pageNumber, int pageSize)
{
TotalCount = count;
PageSize = pageSize;
CurrentPage = pageNumber;
TotalPages = (int) Math.Ceiling(count / (double) pageSize);
this.AddRange(items);
}
public static async Task<PagedList<T>> CreateAsync(IQueryable<T> source, int pageNumber, int pageSize)
{
var count = await source.CountAsync();
var items = await source.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToListAsync();
return new PagedList<T>(items, count, pageNumber, pageSize);
}
}