LINQ搜索记录直到parentid = 0

时间:2013-04-19 01:01:21

标签: c# linq

我有一个包含3个字段的C#列表:IDNameParentID。我将它绑定到树视图。现在我还有一个搜索功能,我想过滤List并重新绑定树视图。

如果我搜索child-1-1,我的linq应该能够获得以下记录:parent-1child-1-1。因此,我必须获取包含我的搜索文本的记录,然后获取ID为ParentID的记录。所有ParentID s(根)都有ParentID0,所以我必须继续获取记录,直到ParentID0

数据示例:

ID  Name       ParentID
1   parent-1   0
2   parent-2   0
3   child-1-1  1
4   child-1-2  1
5   child-2-1  2

所以我的问题是如何获得一个LINQ表达式来获取我上面描述的记录?

我的意思是var mydata = from p in this.mylist where... ???

1 个答案:

答案 0 :(得分:0)

假设您List<Node> myList Node的{​​{1}}类属于基于https://stackoverflow.com/a/7063002/1594178变体的属性(Id, ParentId, ...)

static IEnumerable<Node> Parents(this IEnumerable<Node> nodes, int startId)
{
    Node node = nodes.Where(n => n.Id = startId).Single();
    yield return node;
    while (node.ParentId != 0)
    {
        node = nodes.Where(n => n.Id = node.ParentId).Single();
        yield return node;
    }
}

将{id = 3}与您孩子的父母一起填充mydata以及该孩子使用

var mydata = mylist.Parents(3)