在我的程序中,我有一些对象,我将称之为“项目”。这些项目有一个类别父项,这些父项可能有自己的类别父项。因此,要按类别父项搜索这些项目,我希望递归地查看每个父项并查看它们是否包含我的搜索字符串。
这些对象存储在数据库中。每个项目都有一个名称、一些其他不相关的内容和一个父项。数据库做成一个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/