如何编写LINQ查询来进行递归?

时间:2015-07-21 18:25:47

标签: .net linq

如果我有一个名为Thing的对象,其具有属性IdChildren,其中Children基本上是Thing的列表。它看起来像这样:

Public Class Thing
    Public Property Id As Guid
    Public Property Children As List(Of Thing)
End Class

现在给定一个现有的List(Of Thing),为了这个例子,让我们称之为aList,我怎么能用递归循环抛出每个Thing和Children来查找是否有项目存在于整个层次结构中?

Dim aList As List(Of Thing)

顺便说一句,给定一个ID,如何针对aList编写LINQ语句,以查看该ID是否存在于层次结构中的任何位置?

希望您能帮助我,并提前感谢您的贡献!

1 个答案:

答案 0 :(得分:2)

Linq不是为递归而设计的,并且不能很好地处理它。有一些方法可以使用它,但标准的递归函数会更清晰,更容易调试:

Public Function IsInTree(Thing theThing, IEnumerable(Of Thing) tree) As Boolean
    If tree.Any(Function(t) t.Id = theThing.Id) Then 
        IsInTree = True
    ElseIf Children Is Not Nothing Then
        IsInTree = tree.Any(Function(t) IsInTree(theThing, t.Children))
    Else
        IsInTree = False
    End If
End Function