gpt4 book ai didi

c# - Linq 递归搜索

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:31 24 4
gpt4 key购买 nike

在我的程序中,我有一些对象,我将称之为“项目”。这些项目有一个类别父项,这些父项可能有自己的类别父项。因此,要按类别父项搜索这些项目,我希望递归地查看每个父项并查看它们是否包含我的搜索字符串。

这些对象存储在数据库中。每个项目都有一个名称、一些其他不相关的内容和一个父项。数据库做成一个IQueryable列表,调用递归方法。但是,我对递归还不够熟悉,无法完成此操作,所以如果有人能帮我一把,那就太好了。

这是我的:

class node
{
private Category parent { get; set; }

node (Item item)
{
this.parent = item.Category;
}

node (Category category)
{
this.parent = category.CategoryParent;
}
}
class CategoryParentIterator
{
public static node Search (node currentNode, string search)
{
if (currentNode == null)
{
return null;
}
//TODO: RECURSIVE PARENT SEARCH
return currentNode;
}

public static IQueryable<Item> Search (this IQueryable<Item> values, string search)
{
//TODO: SEARCH
}
}

搜索将通过类似“List = List.Search(searchString)”的方式调用。

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

我认为你应该重新定义你的类。

让我们有一个独特的类

public class Node
{
public Node Parent { get; private set; }

//additional properties etc...
public string Name { get; set;}
public int Value {get; set;}

public Node(Node parent)
{
Parent = parent;
}
}

所以现在任何 Node 实例都有一个 parent 属性,如果它为 null 则没有父级并且您到达了根。

现在搜索逻辑:

public static T SearchInHierarchy<T>(T node, Func<T,bool> predicate)
{
if(predicate) return node;
if(node.Parent == null) return null; //null if not found
return SearchInHierarchy(node.Parent, match);
}

这里的谓词是你想要的搜索。一个例子:

public static Test()
{
var ancestor= new Node();
var parent = new Node(ancestor);
var child = new Node(parent);
var result = SearchInHierarchy(child, x => x.Name == "Foo");
}

关于c# - Linq 递归搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com