我有一个包含3个字段的C#列表:ID
,Name
和ParentID
。我将它绑定到树视图。现在我还有一个搜索功能,我想过滤List并重新绑定树视图。
如果我搜索child-1-1
,我的linq应该能够获得以下记录:parent-1
,child-1-1
。因此,我必须获取包含我的搜索文本的记录,然后获取ID为ParentID
的记录。所有ParentID
s(根)都有ParentID
值0
,所以我必须继续获取记录,直到ParentID
为0
。
数据示例:
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...
???
答案 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)