linq 递归
时间: 2023-08-21 18:19:49 浏览: 207
Linq递归语句
3星 · 编辑精心推荐
LINQ(Language Integrated Query)是C#语言中的一种功能强大的数据查询技术,它可以用于各种数据源,如XML、数据库、对象集合等。LINQ提供了一种统一的查询语法,使得我们可以通过类似SQL的语法来查询不同的数据源。
递归是一种常见的算法技术,它可以用于解决许多复杂的问题。在LINQ中,我们也可以使用递归来查询数据。例如,我们可以使用递归来查询一个树形结构的数据。下面是一个简单的示例:
```
public class Node
{
public int Id { get; set; }
public string Name { get; set; }
public List<Node> Children { get; set; }
}
public static IEnumerable<Node> Traverse(Node node)
{
yield return node;
if (node.Children != null)
{
foreach (var child in node.Children)
{
foreach (var subChild in Traverse(child))
{
yield return subChild;
}
}
}
}
```
在上面的示例中,我们定义了一个Node类来表示树形结构的节点,其中包含一个Id、一个Name和一个Children属性。我们还定义了一个Traverse方法,该方法使用递归来遍历整个树形结构,并返回一个IEnumerable<Node>类型的结果。
在Traverse方法中,我们首先使用yield return关键字返回当前节点,然后使用foreach语句遍历当前节点的所有子节点,并使用递归调用Traverse方法来遍历子节点的子节点。最后,我们使用yield return关键字返回遍历的结果。
使用LINQ查询树形结构的数据时,我们可以使用Traverse方法来查询整个树形结构,例如:
```
var rootNode = new Node
{
Id = 1,
Name = "Root",
Children = new List<Node>
{
new Node
{
Id = 2,
Name = "Child1",
Children = new List<Node>
{
new Node
{
Id = 3,
Name = "SubChild1",
Children = new List<Node>
{
new Node
{
Id = 4,
Name = "SubSubChild1",
Children = null
}
}
}
}
},
new Node
{
Id = 5,
Name = "Child2",
Children = new List<Node>
{
new Node
{
Id = 6,
Name = "SubChild2",
Children = null
}
}
}
}
};
var result = from node in Traverse(rootNode)
where node.Id % 2 == 0
select node;
foreach (var node in result)
{
Console.WriteLine(node.Name);
}
```
在上面的示例中,我们首先创建了一个树形结构的数据,并使用Traverse方法遍历整个树形结构。然后,我们使用LINQ查询语法从遍历的结果中筛选出Id为偶数的节点,并输出它们的Name属性。
阅读全文