2016-08-04 54 views
0

我是linq的新手,请原谅我的无知。首先根据自定义规则对列表进行分组,然后根据其他字段对分组进行排序

我有一个列表,我需要根据一定的条件进行分组。现在

,我的列表中包含2场 -

1)类型2)严重

我的类型是:

一)VM B)SQL C)负载平衡器

我的严重程度可以是:

一)sev1 B)sev2 C)sev3

我想组基于以下严格的顺序列表:(所以首先负载平衡器的东西应该表现 - 后来VM - 最后SQL的)

1)负载平衡器2)VM 3)SQL

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

我能使用非定义的分组机制,在这里组:

from i in thelist 
group i by i.Type; 

我正在读一些材料在网上,它看起来像我将不得不重写equals和哈希方法。我”米不知道该怎么做?还是有更好的方法?

谢谢。

+0

你应该先对其进行排序,然后将它们分组,这样的群体仍然排序无需一些花哨的东西。 –

回答

1

既然你没有指定是这个名单上的哪些对象(“现在,我的列表中包含2场 - ”()?),我认为这是(请告诉我,如果有什么是错的):

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

并与一点LINQ

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") 

输出(属性):

"Load", "sev1" 
"Load", "sev2" 
"VM", "sev1" 
"VM", "sev2" 
"SQL", "sev1" 
"SQL", "sev2" 
"SQL", "sev3" 
+0

我最终使用了这种变化。我爱简单的解决方案!非常感谢! – 90abyss

+1

OrderBy可以缩写为'.OrderBy(i => i.type [0] =='S'?3:i.type [0] =='V'?2:1)'是的,那会抛出如果'type'是空的,那么,如果它是空的,两种方法都会抛出,并且两者都会失败,因为type是除“VM”,“SQL”或“Load”之外的任何东西,所以我们可以假设前提条件) –

0

按严重性对它们进行排序然后按类型分组应该应该工作,但据我所知,分组并不能保证稳定,所以谁知道呢?

如果不是,则下一个最好的做法是将对象拉出组以使用它们。

相关问题