linq - 父/子查询,仅选择最低级别

时间:2012-08-05 14:00:14

标签: linq

给出一个共同的父/子表:

Table A
Column Id int
Column Parent_Id int
Column Description text

我想只获取没有任何子节点的节点。

1,null,"PARENT A"
2,null,"PARENT B",
3,null,"PARENT C", 
100,1,"CHILD A1",
101,1,"CHILD A2",
102,2,"CHILD B1"

因此,对于我的结果集,我只想得到:

父C(因为它没有任何子元素),以及子A1,B2,B1。

2 个答案:

答案 0 :(得分:1)

您没有说明您使用LINQ查询到底是什么,但一般的想法是

var leafNodes = nodes.Where(n => nodes.Count(n1 => n1.Parent_Id == n.Id) == 0);

答案 1 :(得分:1)

您可能希望使用Any()方法而不是Count()== 0.请参阅Which method performs better: .Any() vs .Count() > 0?

var itemsWithoutChildren = nodes.Where(item=>!nodes.Any(innerItem=>innerItem.Parent_Id==item.Id))