ASP NET MVC : "Cannot order by type 'System.Object'."
- by rah.deex
This is my code. I got this sample from the Internet and I tried to modify it.
private void FillGridData()
{
//IQueryable<SVC> query = _customerService.GetQueryable();
_dataContext = new dbServiceModelDataContext();
var query = from m in _dataContext.SVCs
select m;
query = AddQuerySearchCriteria(query, _grid.SearchForm);
int totalRows = query.Count();
_grid.Pager.Init(totalRows);
if (totalRows == 0)
{
_grid.Data = new List<SVC>();
return;
}
query = AddQuerySorting(query, _grid.Sorter);
query = AddQueryPaging(query, _grid.Pager);
List<SVC> customers = query.ToList(); //***ERROR IN HERE***//
_grid.Data = customers;
}
The error says "Cannot order by type 'System.Object'.", what is the matter?
Do you have solution for me?
This is The AddQuerySorting Method THE PROBLEM IS IN HERE
is there anything wrong about the code? :(
private IQueryable<SVC> AddQuerySorting(IQueryable<SVC> query, Sorter sorter)
{
if (String.IsNullOrEmpty(sorter.SortField))
return query;
//Used approach from http://www.singingeels.com/Articles/Self_Sorting_GridView_with_LINQ_Expression_Trees.aspx
//instead of a long switch statement
var param = Expression.Parameter(typeof(SVC), "customer");
var sortExpression = Expression.Lambda<Func<SVC, object>>
(Expression.Convert(Expression.Property(param, sorter.SortField), typeof(object)), param);
if (sorter.SortDirection == SortDirection.Asc)
query = query.OrderBy(sortExpression);
else
query = query.OrderByDescending(sortExpression);
return query;
}
here is AddQueryPaging Method
private IQueryable<SVC> AddQueryPaging(IQueryable<SVC> query, Pager pager)
{
if (pager.TotalPages == 0)
return query;
query = query.Skip((pager.CurrentPage - 1) * pager.PageSize)
.Take(pager.PageSize);
return query;
}