我有一个对象列表建模工具栏,我试图根据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
}
答案 0 :(得分:0)
您的代码没有订购。
它有什么代码来生成一个新的查询来排序一个列表 - 但是永远不会执行。
sortingList.OrderBy(m => m.RoleId)
.ThenBy(m => m.ToolbarLocation)
.ThenBy(m => m.Band)
.ThenBy(m => m.BandIndex);
这些调用的返回是必须执行的IQueryable
。你永远不会.OrderBy
等。不要改变输入数据。
foreach,ToList等实现了新的结果集。