LINQ组中的一个类型的项目 [英] LINQ group one type of item

查看:105
本文介绍了LINQ组中的一个类型的项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个列表,具有多种派生类。我可能有这样的事情:

I have a List that has various derived classes. I may have something like this:

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

我想使用LINQ到半排序列表,以便自然秩序维持,除了等级2。所有的Class2实例应该在该第一等级2发生的地点被组合在一起。以下是输出应该是这样的:

I am trying to use LINQ to semi-sort the list so that the natural order is maintained EXCEPT for Class2. All Class2 instances should be grouped together at the place that the first Class2 occurs. Here is what the output should be like:

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

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

I can't for the life of me figure out how to do this...

推荐答案

您可以做到这一点是这样的:

You can do it like this:

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();

这将采取所有的项目,直到第一个类2 项,然后是所有的类2 的项目,其次是所有剩余的非 - 类2 项目

This will take all of the items until the first Class2 item, followed by all of the Class2 items, followed by all remaining non-Class2 items.

这篇关于LINQ组中的一个类型的项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆