Reputation: 1112
I'm trying to write a function that sorts by column name
I have a problem in the second case case = "Count". How can I convert convert IQueryable to IOrderedQueryable.
Thank You
public PagedResults<activity> getList(Expression<Func<activity, bool>> criteria, PagingSpecification paging)
{
IQueryable<activity> search = criteria != null? Query.Where(criteria): Query;
IOrderedQueryable<activity> orderedQuery;
switch (paging.SortColumnName)
{=
case "Name":
orderedQuery = (paging.SortDirection == SortDirection.Ascending)
? search.OrderBy(e => e.Person.Name)
: search.OrderByDescending(e => e.Person.Name);
break;
case "Count":
orderedQuery = (paging.SortDirection == SortDirection.Ascending)
? search.ToList().OrderBy(e => e.GetCount()).AsQueryable<activity>()
: search.ToList().OrderByDescending(e => e.GetCount()).AsQueryable<activity>();
break;
default:
orderedQuery = GetOrderedQueryable(search, paging.SortColumnName, paging.SortDirection);
break;
}
IQueryable<activity> dataQuery = orderedQuery.Skip(paging.StartIndex).Take(paging.PageSize);
return new PagedResults<activity>(dataQuery.ToList(), search.LongCount());
}
Upvotes: 3
Views: 1149
Reputation: 18995
Call AsQueryable
before OrderBy
:
orderedQuery = (paging.SortDirection == SortDirection.Ascending)
? search.ToList().AsQueryable<activity>().OrderBy(e => e.GetCount())
: search.ToList().AsQueryable<activity>().OrderByDescending(e => e.GetCount());
OrderBy
turns an IEnumerable
(like List
) into an IOrderedEnumerable
, but turns an IQueryable
into an IOrderedQueryable
.
Upvotes: 4