假设我有一个对象列表:
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/