2016-01-17 39 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

谢谢。那确实是问题所在。 –