2013-08-04 273 views
2

我有以下類別:LINQ聚集嵌套計數

class Outer 
{ 
    public ICollection<Inner> Inners 
} 

class Inner 
{ 
    public ICollection<Inner> Inners 
} 

我想訂購通過內部件和嵌套的內部件的總數,外表面遞減的名單。

例如:

如果我有2,外表面:所述第一具有3個內件,每個集合與1嵌套內部然後合計爲5

第二具有例如可具有的集合2 inners,每個嵌套3內嵌然後 總計數是2 + 3 + 3 = 8

因此,在返回結果第二個示例應該是第一個。

有人嗎? :)

+3

不應該總在第一例如是6,還是我誤解了一些東西? –

回答

3

首先,建立一個遞歸方法來計算一個Inner對象內側的內部對象,包括本身:

public static int Count(Inner inner) 
{ 
    var count = 1; 
    if (inner.Inners != null && inner.Inners.Any()) 
     count += inner.Inners.Sum(x => Count(x)); 

    return count; 
} 

然後你就可以訂購:

var result = outers.OrderBy(o => o.Inners.Sum(i => Count(i)));