2014-02-12 49 views
0

大廈從這個問題進行排序匿名類型:Trying to concatenate columns in LINQ如何在不命名的列

現在我要進行排序:

var orderByIndexVal = Convert.ToInt32(Request["iSortCol_0"]); 
var direction = Request["sSortDir_0"]; 

var gridInfo = 
    from leader in db.SchoolLdrAdminAccesses 
     join emp in db.Employees 
     on leader.ID equals emp.ID 
     select new List<string> { leader.ID, emp.FirstName + " " + emp.LastName }; 

return Json(new 
     { 
      sEcho = param.sEcho, 
      iTotalRecords = gridInfo.Count(), 
      iTotalDisplayRecords = gridInfo.Count(), 
      aaData = gridInfo.ToArray() 
     }, 
     JsonRequestBehavior.AllowGet); 

閱讀這篇文章後: LINQ sorting anonymous types?

我的問題是,我沒有任何名字在我的gridInfo

什麼到目前爲止,我已經試過:

  if (direction == "asc") 
      { 
       gridInfo = gridInfo.OrderBy(gi => gi[orderByIndexVal]); 
      } 
      else 
      { 
       gridInfo = gridInfo.OrderByDescending(gi => gi[orderByIndexVal]); 
      } 

但我發現了以下錯誤:

LINQ to Entities does not recognize the method 'System.String get_Item(Int32)' method, and this method cannot be translated into a store expression.

在下面的代碼塊:

  return Json(new 
      { 
       sEcho = param.sEcho, 
       iTotalRecords = gridInfo.Count(), 
       iTotalDisplayRecords = gridInfo.Count(), 
       aaData = gridInfo.ToArray() 
      }, 
      JsonRequestBehavior.AllowGet); 
+0

不知道我明白這個問題,但'gridInfo = gridInfo.OrderBy(...)'看起來應該這樣做。你嘗試過嗎? – Jon

+0

@Jon我更新了我的問題,告訴你我做了什麼以及我作爲錯誤得到了什麼。 – webdad3

回答

3

您需要兌現的列表,所以order by不會在DB發生,但在.NET中,級聯發生之後。

var gridInfo = (from leader in db.SchoolLdrAdminAccesses 
     join emp in db.Employees 
     on leader.ID equals emp.ID 
     select new string[]{ leader.ID.ToString(), 
      emp.FirstName + " " + emp.LastName }) 
     .ToList(); 

另請注意,使用數組而不是列表使用較少的內存。希望有所幫助。

+0

我仍然收到相同的錯誤。 – webdad3

+1

你確定你沒有錯過「.ToList();」最後? – Diego

+0

當我使用您建議的語法時,出現錯誤:無法在查詢結果中初始化數組類型'System.String []'。考慮使用'System.Collections.Generic.List'1 [System.String]'來代替。 – webdad3

0

我覺得這是問題

new List<string> { leader.ID, emp.FirstName + " " + emp.LastName }; 

您選擇匿名類型是兩列{詮釋,字符串}不是一個簡單的列表

只是Select new { leader.ID, emp.FirstName + " " + emp.LastName }; Select語句將使一個IEnumerable自動,所以你不要;噸需要列表<>部分

我假設leader.ID是一個i​​nt這裏(這可能是錯誤的)

+0

ID是一個i​​nt,但通過取出列表它要求我命名firstName + lastName串聯,並且我試圖避免這種情況,因爲我將它轉換回爲JSON以便網格消耗和網格不喜歡名爲JSON條目... – webdad3

+0

不知道這是否會工作,但嘗試新的字典,以取代列表 - 在我添加orderby代碼時,數據類型應該匹配 –