在某个元素之后OrderBy List是否可能?

时间:2012-06-20 15:23:59

标签: c# linq list sql-order-by

正如标题所说。我想在列表上执行和排序 - 但是在列表的子部分。确切地说,我想订购除第一个元素之外的所有元素。

编辑:为了澄清,我需要在完成所有排序后保留所有(甚至是未排序的)元素。 (即第一个项目(未排序)保留在它所处的位置(在列表的开头)并且所有后续项目都已排序)。

4 个答案:

答案 0 :(得分:3)

我认为如果你想要最后的未分类的项目,这应该有效:

list.Take(1).Concat(list.Skip(1).OrderBy(xyz));

答案 1 :(得分:3)

您可以使用:

list.Take(1).Concat(list.Skip(1).OrderBy(predicate))

答案 2 :(得分:3)

这样的事情应该有效:

var results = list.Take(1)
                  .Concat(list.Skip(1).OrderBy(x => x.Something))
                  .ToList();

修改

由于发布问题已被编辑,以澄清无序项目应位于集合的“结尾”,这可以通过上面的微小更改(只需切换方法调用)来实现:< / p>

var results = list.Skip(1)
                  .OrderBy(x => x.Something)
                  .Concat(list.Take(1))
                  .ToList();

答案 3 :(得分:1)

您可以获取索引,并将其用作排序的一部分,而不是删除第一个项目然后将其添加回来(

list.Select((value, index) => new { value, index })
    .OrderBy(x => x.index != 0)
    .ThenBy(x => x.value)
    .Select(x => x.value)
    .ToList()