Linq扩展以递归方式检索项目集合

时间:2012-08-25 07:44:25

标签: linq

public class MyClass
{
    public MyClass();

    public long Id { get; set; }
    public intScore { get; set; }
    public MyClass[] subclasses { get; set; }
    public string title { get; set; }
   .....    
 }

从extrenal源返回的结果是递归的,我试图使用linq或使用递归的任何扩展方法从集合中检索结果,任何帮助表示赞赏。

离;我的收藏是

Myclass results=XXXmethod(xxxx)// which gives me results.

子类是Myclass类型的列表,所以这个列表将再次有一些集合,并且可以收集agian嵌套级别

说该服务返回了10个结果,或者Myclass[10] Myclass[0]再次拥有Myclass[4],可能有2个或4个,需要构建一个集合allitems

我想这样做,但有些人不见了

results.class.subclusters.subclasses (o => o.subclasses )
               .SelectMany(x => x.subclasses ).ToList()

但是没有给出正确的结果。

1 个答案:

答案 0 :(得分:3)

LINQ本身不支持递归方法,但你可以使用如下的递归方法:

public class MyClass
{
    public int Id { get; set; }

    public MyClass[] SubClasses { get; set; }

    //More properties

    public IEnumerable<MyClass> GetRecursive()
    {
        yield return this;

        if (SubClasses != null)
        {
            foreach (var item in SubClasses
                          .Where(s => s != null)
                          .SelectMany(x => x.GetRecursive()))
            {
                yield return item;
            }
        }
    }
}

然后致电:

myClass.GetRecursive()