ошибка: LINQ to Entities не распознает метод - PullRequest
1 голос
/ 18 марта 2011

я пытаюсь построить jqgrid. код сервера возвращает ошибку?:

LINQ to Entities не распознает метод метода System.String ToString (), и этот метод нельзя преобразовать в выражение хранилища.

код:

public ActionResult GridData(string sidx, string sord, int page, int rows)
{

    ProductsEntities4 db = new ProductsEntities4();
    var jsondata = new {
            total = 1,
            page = 1,
            records = 2,
            rows = (from pr in db.Products
                    select new {
                        i = pr.Id,
                        cell = new string[] { pr.Id.ToString(), pr.ProductName }
                    }).ToArray()
            };

    //return jsondata;
    return Json(jsondata, JsonRequestBehavior.AllowGet);
}

, где

<script type="text/javascript">
jQuery(document).ready(function () {
    jQuery("#list").jqGrid({
        url: '/Home/GridData/',
        datatype: 'json',
        mtype: 'GET',
        colNames: ['Id', 'ProductName'],
        colModel: [
      { name: 'Id', index: 'Id', width: 40, align: 'left' },
      { name: 'ProductName', index: 'ProductName', width: 40, align: 'left' }],
        pager: jQuery('#pager'),
        rowNum: 10,
        rowList: [5, 10, 20, 50],
        sortname: 'Id',
        sortorder: "desc",
        viewrecords: true,
        imgpath: '/scripts/themes/coffee/images',
        caption: 'My first grid'
    });
}); 

1 Ответ

0 голосов
/ 18 марта 2011

Попробуйте использовать этот код

public ActionResult GridData(string sidx, string sord, int page, int rows)
{

    ProductsEntities4 db = new ProductsEntities4();
    var products = db.Products
                   .OrderBy ("it." + sidx + " " + sord).Skip ((page - 1)* rows)
                   .Take (rows);
    var totalRecords = products.Count ();

    // to be able to use ToString() below which is NOT exist in the LINQ to Entity
    // we get the properties which we need and convert results to List
    var productData = (from product in products
                       select new { product.Id, product.ProductName }).ToList ();

    var jsondata = new {
            total = (totalRecords + rows - 1) / rows,
            page = 1,
            records = totalRecords,
            rows = (from pr in productData
                    select new {
                        id = pr.Id,
                        cell = new string[] { pr.Id.ToString(), pr.ProductName }
                    }).ToList()
            };

    //return jsondata;
    return Json(jsondata, JsonRequestBehavior.AllowGet);
}

и удалите устаревший параметр imgpath из jqGrid.

...