怎么应该使用C#linq orderby?

时间:2016-01-17 19:20:07

标签: c# linq

我有一个对象列表建模工具栏,我试图根据4个属性对其进行排序:

.directive('select', function() {
  return {
    restrict: 'E',
    link: function(scope, element, attrs) {
      element.bind('focus', function(e) {
        if (window.cordova && window.cordova.plugins.Keyboard) {
          // console.log("show bar (hide = false)");
          cordova.plugins.Keyboard.hideKeyboardAccessoryBar(false);
        }
      });
      element.bind('blur', function(e) {
        if (window.cordova && window.cordova.plugins.Keyboard) {
          // console.log("hide bar (hide = true)");
          cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        }
      });
    }
  };
})

对象的类型为:

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

ToolbarLocation是同名的枚举:

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; }
}

有关RoleId的排序列表是可以的,但在一个RoleId的范围内,Top和Left的位置是混合的。与Band值0和1相同。一个角色范围内的唯一顺序是BandIndex。

所以我觉得它似乎在做:

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

1 个答案:

答案 0 :(得分:0)

您的代码没有订购。

它有什么代码来生成一个新的查询来排序一个列表 - 但是永远不会执行。

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

这些调用的返回是必须执行的IQueryable。你永远不会.OrderBy等。不要改变输入数据。

foreach,ToList等实现了新的结果集。