递归检索项集合的Linq扩展
从External源返回的结果是递归的,我正在尝试使用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
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()