LINQ - 组特定类的类

Nel*_*mel 5 .net c# linq

这个问题类似于LINQ group one类型的项目,但是以更通用的方式处理.

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

List<BaseClass> list = new List<BaseClass>() {
  new Class1(1),
  new Class2(1),
  new Class1(2),
  new Class3(1),
  new Class2(2),
  new Class4(1),
  new Class3(2)
};
Run Code Online (Sandbox Code Playgroud)

我试图使用LINQ对列表进行半排序,以便为某些具有base.GroupThisType == true的类保持自然顺序.具有GroupThisType的所有类应该在发生相同类型的第一个类的位置组合在一起.这是输出应该是什么样的:

List<BaseClass> list = new List<BaseClass>() {
  new Class1(1),
  new Class1(2),
  new Class2(1),
  new Class3(1),
  new Class3(2)
  new Class2(2),
  new Class4(1),
};
Run Code Online (Sandbox Code Playgroud)

编辑: 哎呀,忘了说这个结果是假设的(Class1和Class3).GroupThisType == true

SLa*_*aks 1

像这样:

list = list.Select((o, i) => new { Index = i * 10000, Value = o })
           .GroupBy(q => q.GetType())
           .SelectMany(g => {
               if (g.First().GroupThisType)
                   return g.Select((q, i) => 
                       new { Index = g.First().Index + i, Value = q.Value }
                   );
               else
                   return g;
           })
           .OrderBy(q => q.Index)
           .Select(q => q.Value)
           .ToList();
Run Code Online (Sandbox Code Playgroud)

允许i * 10000在任意两个项目之间插入组中最多 10,000 个项目。

您可以替换g.First().GroupThisTypetypesToGroup.Contains(g.Key).