2013-04-04 49 views
1

希望有人能夠提供幫助。試圖在ASP.NET MVC 4 C#中實現jqGrid。嘗試對列進行排序時,我不斷收到以下錯誤。該列實際上是來自使用外鍵的對象的字段。不知道如何改變代碼來解決這個問題。網格對於我正在使用的模型中的字段進行正確排序,而不是來自外鍵的字段。我應該使用ViewModel嗎?我使用Oleg示例中的代碼。 item.Name是對象和item.Name.FullName是我想排序的列是拋出下面的錯誤。謝謝!ORDER BY排序鍵類型必須是可訂購的

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() 
     }); 
    } 
+0

歡迎來到Stackoverflow!沒有必要在「jqgrid」前添加問題。這就是標籤的用途。如果您有興趣,請閱讀http://meta.stackexchange.com/questions/19190進行討論。 – Patrick 2013-04-04 13:28:58

回答

0

這可能會失敗由於各種原因:

  • item.Name.FullName是在數據庫中的二進制字段?
  • 要通過item訪問Name對象,必須啓用延遲加載。你確定它是?

無論如何,僅使用您需要的數據的視圖模型始終是一個好主意,並且是將數據訪問層與控制器分開的好方法。

相關問題