ASP NET MVC : "Cannot order by type 'System.Object'."

Posted by rah.deex on Stack Overflow See other posts from Stack Overflow or by rah.deex
Published on 2010-04-27T04:11:34Z Indexed on 2010/04/27 4:13 UTC
Read the original article Hit count: 839

Filed under:

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

© Stack Overflow or respective owner

Related posts about asp.net-mvc