递归检索项集合的Linq扩展

递归检索项集合的Linq扩展,linq,Linq,从External源返回的结果是递归的,我正在尝试使用linq或任何使用递归的扩展方法从集合中检索结果,欢迎任何帮助 前;我的收藏是 public class MyClass { public MyClass(); public long Id { get; set; } public intScore { get; set; } public MyClass[] subclasses { get; set; } public string title

从External源返回的结果是递归的,我正在尝试使用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; }
   .....    
 }
子类是一个类型为
Myclass
的列表,因此此列表将再次具有一些集合,并且可以通过嵌套级别进行集合

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

我正试着这样做,但有些人不见了

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

但是它不能给出正确的结果。

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

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

您可能想在其中添加一个空过滤器:subclass.Where(x=>x!=null)。SelectMany(…)我正在尝试做一些类似的事情,但不确定这里的收益率是如何工作的,另一件事是没有结构。。我将结果作为myclass的对象返回,只是想知道如何调用myclass.Getrecursive(),Getrecursive应该使用mylist并返回所有子项,对吗?有什么帮助吗appreciated@PraveenKonduru:你说的“没有结构”和“结果作为myclass的对象返回”是什么意思?我正在使用一个服务,该服务将这些结果返回给我,结果类型为。当然,您发送给我的结果结构的代码是相同的;这是什么Thanks@PraveenKonduru:
yield return此
是您获得结果的关键,您可能需要仔细查看您的yield:
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()