首先根据自定义规则对列表进行分组,然后根据其他字段对组进行排序

时间:2016-08-04 19:15:10

标签: c# linq

我是linq的新手所以请原谅我的无知。

我有一个列表,我需要根据某个条件进行分组。

现在,我的列表包含2个字段 -

  

1)类型2)严重性

我的类型是:

  

a)VM b)SQL c)LoadBalancer

我的严重程度可以是:

  

a)sev1 b)sev2 c)sev3

我想根据以下严格的顺序对列表进行分组:(首先应该显示LoadBalancer的东西 - 后来的VM - 最后是SQL的)

  

1)LoadBalancer 2)VM 3)SQL

一旦将它们分组,我想根据严重程度对它们进行排序。

我可以使用非定义的分组机制对其进行分组:

from i in thelist 
group i by i.Type;

我正在网上阅读一些资料,看起来我必须重写equals和hash方法..我不知道该怎么做?或者有更好的方法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

由于你没有指定这个列表中的对象(“现在,我的列表包含2个字段 - ”(?))我认为它是(请告诉我是否有任何错误):

@Component({
  selector: 'players',
  templateUrl: 'app/players.html',
  directives: [ROUTER_DIRECTIVES]
})
export class PlayersComponent {}

还有一点LINQ

class TestItem {
    public string type;
    public string severity;
}

我知道这有点像黑客,但它适用于这种奇怪的排序方式。

输入:

var test = list
    .OrderBy(i =>
        i.type.StartsWith("S") ? 3 :
        i.type.StartsWith("V") ? 2 : 1)
    .ThenBy(i => i.severity);

输出(属性):

new TestItem("VM", "sev1"),
new TestItem("SQL", "sev2"),
new TestItem("Load", "sev1"),
new TestItem("VM", "sev2"),
new TestItem("SQL", "sev1"),
new TestItem("Load", "sev2"),
new TestItem("SQL", "sev3")

答案 1 :(得分:0)

按严重程度对它们进行排序,然后按类型进行分组可以正常工作,但据我所知,分组并不保证稳定,所以谁知道?

如果不是,那么下一个最好的做法是在将对象拉出组以使用它们时对对象进行排序。