在我的程序中,我有一些对象,我称之为“项目”。这些项目具有父类别,这些父母可能拥有自己的类别父母。因此,要按类别父项搜索这些项目,我希望以递归方式查看每个父项,看看它们是否包含我的搜索字符串。
这些对象存储在数据库中。每个项目都有一个名称,一些其他不相关的东西,以及一个父母。数据库被制作成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)”的方式调用。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
我认为你应该重新定义你的课程。
让我们有一个独特的课程
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实例都有一个父属性,如果它是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");
}