LINQ组是一种类型的项目

时间:2010-05-14 15:06:51

标签: c# .net linq

我有一个包含各种派生类的List。我可能有这样的事情:

List<BaseClass> list = new List<BaseClass>() {
  new Class1(),
  new Class2(1),
  new Class3(),
  new Class2(2),
  new Class4()
};

我正在尝试使用LINQ对列表进行半排序,以便保持自然顺序,除了Class2。所有Class2实例应在第一个Class2出现的位置组合在一起。这是输出应该是什么样的:

List<BaseClass> list = new List<BaseClass>() {
  new Class1(),
  new Class2(1),
  new Class2(2),
  new Class3(),
  new Class4()
};

我不能为我的生活弄清楚如何做到这一点......

1 个答案:

答案 0 :(得分:3)

你可以这样做:

list = list
    .TakeWhile(o => !(o is Class2))
    .Concat(list.Where(o => o is Class2))
    .Concat(
        list.SkipWhile(o => !(o is Class2)).Where(o => !(o is Class2))
    )
    .ToList();

这会占用所有项目,直到第一个Class2项目,然后是所有Class2项目,然后是所有剩余的非Class2项目。