c# - 使用 LINQ 进行选择性排序、部分排序

标签 c# sorting union partial

假设我有一个对象列表:

var items = new {
    new { Order = 0 },
    new { Order = 1 },
    new { Order = -1 },
    new { Order = 3 },
    new { Order = 2 },
    new { Order = -1 }
};

我需要订购它,以便带有 Order > -1 的商品位于按升序排列的列表顶部,其余项目为 Order == -1正在跟踪他们。

有没有比使用 Conact() 更优雅的方法呢?和 Where()子句:

var orderedItems = items.Where(x => x.Order > -1).OrderBy(x => x.Order)
                   .Conact(items.Where(x => x.Order == -1);

所以在排序后这个列表看起来像:

var items = new {
    new { Order = 0 },
    new { Order = 1 },
    new { Order = 2 },
    new { Order = 3 },
    new { Order = -1 },
    new { Order = -1 }
};

还有 items实际场景中的列表已经很复杂IQueryable<T>目的。这就是为什么我试图找到进行这种选择性排序的最佳方式。

最佳答案

您可以试试这个 - 它会产生您期望的结果:

items.OrderBy(x.Order => x.Order == -1).ThenBy(x.Order => x.Order);

关于c# - 使用 LINQ 进行选择性排序、部分排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2281900/

相关文章:

c# - MVC3中的Page和ViewBag动态对象有什么区别?

c# - 是否可以在 C# 中有一个名为 bool 的字段?

javascript - 我可以配置默认 Angular 过滤器来显示字符串,以便以搜索词开头的字符串排在前面吗?

mysql - SQL联盟更新

c# - 读取 HTML 数据中的数据

c# - 具有类约束的字段

javascript - 更优雅的数组二次排序

c# - 使用动态生成的控件进行 Gridview 排序和分页

Python typehints : Union[int, List[int]] - 索引赋值不支持的目标

sql - 在 PL/SQL 中合并两个表中的两列