2013-03-06 112 views
0

我有填充和排序的動態列表動態列表:排序不工作

List<dynamic> eventList = new List<object>(); 

      foreach (Task t in tasks) 
      { 
       eventList.Add(
       new 
       { 
        id = "t" + t.TaskID.ToString(), 
        title = t.TaskTitle, 
        start = ResolveStartDate(StartDate(t.Schedule.DateFrom.Value)), 
        end = ResolveEndDate(StartDate(t.Schedule.DateFrom.Value), t.Schedule.Hours.Value), 
        description = t.TaskDescription, 
        allDay = false, 
        resource = t.Schedule.EmployeID.ToString(), 
        color = ColorConversion.HexConverter(System.Drawing.Color.FromArgb(t.Project.Color.Value)) 
       } 
      ); 
      } 

      foreach (Case c in cases) 
      { 
       eventList.Add(
       new 
       { 
        id = "c" + c.CaseID.ToString(), 
        title = c.CaseTitle + "-" + c.Customer.CustomerDescription, 
        start = ResolveStartDate(StartDate(c.Schedule.DateFrom.Value)), 
        end = ResolveEndDate(StartDate(c.Schedule.DateFrom.Value), c.Schedule.Hours.Value), 
        description = c.CaseDescription, 
        allDay = false, 
        resource = c.Schedule.EmployeID.ToString(), 
        color = ColorConversion.HexConverter(System.Drawing.Color.FromArgb(c.Color.Value)) 
       } 
      ); 

      } 

      eventList.OrderBy(p => p.title); 

當我在調試模式之前和排序調用後檢查,該名單是不是在所有排序,它是在訂單添加。

當我運行它時,我看不到任何東西被排序。什麼可能是錯的?

回答

1

OrderBy不會更改原始列表。它只是創造一個新的,與第一個相同的元素,但以不同的順序。 嘗試

eventList = eventList.OrderBy(p => p.title).ToList(); 
2

這就是問題所在:

eventList.OrderBy(p => p.title); 

你假設OrderBy各種現有的集合。它沒有。它返回一個有序的序列。你忽略了那個返回值,所以這個聲明是無用的。

你可能想:

eventList = eventList.OrderBy(p => p.title).ToList(); 

這不只是OrderBy其工作原理是這樣 - 所有 LINQ序列運算(SelectWhereJoin等)離開了原來的集合不變,並用返回一個序列適當投影,過濾(等)數據。

0

下面這行只是一個查詢:

eventList.OrderBy(p => p.title); 

這意味着,它是像類,結構語句。它只是宣佈一些結構,什麼都不做。爲了instatiate該查詢,則必須按如下把它複製到一個數組或列表:

var sortedArray = eventList.OrderBy(p => p.title).ToArray(); 

之後,EVENTLIST將通過迭代和元素將被寫入到陣列,並存儲在sortedArray變量。