2016-01-17 69 views
-6

我有對象建模工具欄的列表,我想對它進行排序基於4個屬性:應該如何使用C#linq orderby then?

List<MenuItemViewModel> sortingList = new List<MenuItemViewModel>; 
FillSortingList(); 
sortingList.OrderBy(m => m.RoleId) 
      .ThenBy(m => m.ToolbarLocation) 
      .ThenBy(m => m.Band) 
      .ThenBy(m => m.BandIndex); 

的對象類型:

public class MenuItemViewModel : ViewModel 
{   
    public int Id { get; set; } 
    public bool IsCheckable { get; private set; } 
    public string Name { get; private set; } 
    public int RoleId { get; private set; } 
    public int Band { get; set; } 
    public int BandIndex { get; set; } 
    public ToolbarLocation { get; set; } 
} 

ToolbarLocation是同一個名字的枚舉:

public enum ToolbarLocation 
{ 
    Left = 0, 
    Top = 1, 
    Float = 2 
} 

排序後的列表是確定的關於角色ID,但內的一個範圍角色ID的位置上和左混合。與Band值0和1相同。一個角色範圍內的唯一順序是BandIndex。

所以對我來說,似乎它在做什麼:

​​
+0

你還沒有向我們展示Band或BandIndex是什麼,所以它很難真正幫助 – pquest

+2

你可以發佈[mcve]嗎? –

+0

我編輯,他們是整數 –

回答

0

你的代碼有沒有順序。

它有什麼代碼來生成一個新的查詢來訂購一個列表 - 但這是從未執行。

sortingList.OrderBy(m => m.RoleId) 
      .ThenBy(m => m.ToolbarLocation) 
      .ThenBy(m => m.Band) 
      .ThenBy(m => m.BandIndex); 

這些調用的返回是一個IQueryable必須被執行。你永遠不會做.OrderBy等不要改變輸入數據。

foreach,ToList等實現了新的結果集。

+0

謝謝。那確實是問題所在。 –