ORDER BY排序键类型必须是可订购的

时间:2013-04-04 12:31:46

标签: c# asp.net asp.net-mvc jqgrid

希望有人可以提供帮助。试图在ASP.NET MVC 4 C#中实现jqGrid。尝试对列进行排序时,我不断收到以下错误。此列实际上是使用外键的对象中的字段。不确定如何更改代码以解决此问题。网格正确排序我正在使用的模型中的字段,而不是来自外键的字段。我应该使用ViewModel吗?我正在使用Oleg的例子中的代码。 item.Name是对象,item.Name.FullName是我正在尝试排序的列,它抛出下面的错误。谢谢!

ORDER BY排序键类型必须是可订购的。近成员访问表达式,第6行,第3列。

public JsonResult DynamicGridData(string sidx, string sord, int page, int rows, bool search, string filters)
    {
        var context = new TeamContext();
        var objectContext = ((IObjectContextAdapter)context).ObjectContext;
        var set = objectContext.CreateObjectSet<Team>();

        var serializer = new JavaScriptSerializer();

        Filters f = (!search || string.IsNullOrEmpty(filters)) ? null : serializer.Deserialize<Filters>(filters);

        ObjectQuery<Team> filteredQuery =
        (f == null ? (ObjectQuery<Team>)set : f.FilterObjectSet((ObjectQuery<Team>)set));

        filteredQuery.MergeOption = MergeOption.NoTracking; // we don't want to update the data

        var totalRecords = filteredQuery.Count();

        var pagedQuery = filteredQuery.Skip("it." + sidx + " " + sord, "@skip",
                                            new ObjectParameter("skip", (page - 1) * rows))
                                     .Top("@limit", new ObjectParameter("limit", rows));

        // to be able to use ToString() below which does NOT exist in the LINQ to Entity
        var queryDetails = (from item in pagedQuery
                            select new { item.TeamId, item.Year, item.Name }).ToList();

        return Json(new
        {
            total = (totalRecords + rows - 1) / rows,
            page,
            records = totalRecords,
            rows = (from item in queryDetails
                    select new[] {
                                    item.TeamId.ToString(),
                                    item.Year,
                                    item.Name.FullName
                                }).ToList()
        });
    }

1 个答案:

答案 0 :(得分:0)

这可能由于各种原因而失败:

  • item.Name.FullName是数据库中的二进制字段吗?
  • 要通过item访问Name对象,必须启用延迟加载。你确定是吗?

无论如何使用只包含所需数据的viewmodel总是一个好主意,并且是将数据访问层与控制器分离的好方法。