linq聚合嵌套计数

时间:2013-08-04 08:10:55

标签: c# linq aggregate-functions

我有以下课程:

class Outer
{
   public ICollection<Inner> Inners
}

class Inner
{
    public ICollection<Inner> Inners
}

我想按照他们的内部和嵌套内部的总数来下令列出outers。

例如:

如果我有2个outers:第一个有3个内部的集合,每个内部有1个嵌套内部,然后总数是5个。

例如,第二个可以有2个内部的集合,每个内部有3个嵌套的内部 总计数为2 + 3 + 3 = 8

因此,在返回的结果中,第二个例子应该是第一个。

任何? :)

1 个答案:

答案 0 :(得分:3)

首先,构建一个递归方法来计算Inner对象内部的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)));