Сложность сортировки выражения Linq с помощью jqGrid - PullRequest
0 голосов
/ 19 декабря 2010

Я видел этот код Сортируемый JqGrid с использованием LINQ to MySQL (DbLinq) и Dynamic LINQ - Orderby не работает и пытается заставить его работать.Но выдает ошибку:

Невозможно упорядочить по типу 'System.Object'

См. Строку в коде с ошибкой здесь.

[HttpPost]
public ActionResult MyGridData(string sidx, string sord, int page, int rows)
{
    IQueryable<Company> repository = companyRepository.GetGridCompanies();

    int pageIndex = Convert.ToInt32(page) - 1;
    int pageSize = rows;
    int totalRecords = repository.Count();
    int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

    // first sorting the data as IQueryable<Ticket> without converting ToList()
    IQueryable<Company> orderdData = repository;

    PropertyInfo propertyInfo = typeof(Company).GetProperty(sidx);

    if (propertyInfo != null)
    {
        orderdData = String.Compare(sord, "desc", StringComparison.Ordinal) == 0 ?
            (from x in repository
             orderby propertyInfo.GetValue(x, null) descending
             select x) :
            (from x in repository
             orderby propertyInfo.GetValue(x, null)
             select x);
    }

    // paging of the results
    IQueryable<Company> pagedData = orderdData
        .Skip((page > 0 ? page - 1 : 0) * rows)
        .Take(rows);

    var jsonData = new
    {
        total = totalPages,
        page,
        records = totalRecords,
        rows = (
            from o in pagedData  //ERROR HERE : Cannot order by type 'System.Object'
            select new
            {
                i = o.companyID,
                cell = new string[] { o.companyID.ToString(), o.companyName, o.companyCity, o.companyState }
            }).ToArray()
    };
    return Json(jsonData);
}

public class CompanyRepository
{
    SandGridDataContext db = new SandGridDataContext();

    // Send Total Number of Companies
    public int CompanyCount()
    {
        return db.Companies.Count();
    }

    public IQueryable<Company> GetGridCompanies()
    {
        return db.Companies;
    }

    public Company GetCompany(int id)
    {
        return db.Companies.SingleOrDefault(d => d.companyID == id);
    }

}

// JS код

jQuery().ready(function () {
    var lastSel;
    jQuery("#sandgrid").jqGrid({
        url: '/JQSandbox/MyGridData/',
        datatype: 'json',
        mtype: 'POST',
        height: 255,
        width: 640,
        colNames: ['Index', 'Name', 'City', 'State'],
        colModel: [
                { name: 'companyID', index: 'companyID', width: 5 },
                { name: 'companyName', index: 'companyName', width: 30 },
                { name: 'companyCity', index: 'companyCity', width: 30 },
                { name: 'companyState', index: 'companyState', width: 4, sortable: false}],

        pager: jQuery('#sandgridp'),
        rowNum: 5,
        rowList: [5, 10, 20, 50],
        sortname: 'companyID',
        sortorder: "desc",
        viewrecords: true,
        altRows: true,
        caption: 'Sandbox Grid',
        ondblClickRow: function (id) {
            if (id && id !== lastSel) {
                jQuery('#sandgrid').restoreRow(lastSel);
                lastSel = id;
                alert("You've seleted " + id);
            }
        },
        subGrid: true,
        subGridUrl: '/JQSandbox/MySubGridData/',
        subGridModel: [
        {
            name: ['Name', 'Department', 'Hire Date', 'Supervisor'],
            width: [80, 20, 80, 10],
            align: ['left', 'left', 'left', 'center'],
            params: ['companyID']
        }]
    }).navGrid('#sandgridp', { edit: false, add: false, del: false });

// Класс компании - это сущность Linq to Sql с полями ниже.

companyID,
companyName, 
companyCity,
companyState

1 Ответ

0 голосов
/ 19 декабря 2010

Я потратил слишком много времени, чтобы решить эту проблему.Пожалуйста, отметьте Заказ LINQ по "строковому" имени .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...