2013-08-04 225 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)));