【问题标题】:how should C# linq orderby thenby be used? [closed]C# linq orderby thenby 应该如何使用? [关闭]
【发布时间】:2016-01-17 19:20:06
【问题描述】:

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

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
}

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

所以对我来说它似乎在做:

_sortingList.OrderBy(m => m.RoleId).ThenBy(m => m.BandIndex);

【问题讨论】:

  • 您没有向我们展示 Band 或 BandIndex 是什么,因此很难真正提供帮助
  • 你能发一个minimal reproducible example吗?
  • 我编辑过,它们是整数
  • 您确定您的问题不在于您希望排序就地进行吗?最后打电话给.ToList(),如果是这样,重新分配_sortingList
  • 可以显示创建的列表吗?

标签: c# linq


【解决方案1】:

您的代码没有排序。

它拥有的是生成新查询以对列表进行排序的代码 - 但从未执行过。

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

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

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

【讨论】:

  • 谢谢。这确实是个问题。
猜你喜欢
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2014-03-04
  • 1970-01-01
相关资源
最近更新 更多