这是我第一次听到LINQ
,我对此一无所知。请温柔我。
我有这组数据。
+---------+--------+---------------+
| RadioID | NodeID | SourceRadioID |
+---------+--------+---------------+
| R0 | 1 | |
| R1 | 1 | |
| R2 | 1 | |
| R3 | 1 | |
| R4 | 1 | |
| R5 | 2 | |
| R6 | 2 | |
| R7 | 2 | R0 |
| R8 | 2 | |
| R9 | 2 | |
| R10 | 11 | |
| R11 | 11 | R9 |
| R12 | 11 | |
| R13 | 11 | |
+---------+--------+---------------+
我需要做的是编写一个返回NodeID
列表的方法。例如,
List<int> dependentNode = GetChildNode(1); // int ParentNode
我的预期结果是NodeID:2 and 11
。
NodeID = 2
是因为RadioID = R7
与RadioID = R0
相关联,属于NodeID = 1
。
NodeID = 11
,因为RadioID = R11
已连接到属于Radio = R9
的{{1}}(也连接到NodeID = 2
)。
我查了这篇文章,但我总是得到NodeID = 1
这是完整的代码:
StackOverFlowException
您可以建议是否有更好的方法来做到这一点。抱歉新手在这里。
答案 0 :(得分:2)
如果你是新手,不要对递归和lambdas过于聪明。
public List<int> GetChildren(int id)
{
var nodes = GetRadio();
var parent = nodes.Single(n => n.NodeID == id);
var children = nodes.Where(n => n.SourceRadioID == parent.RadioID).Select(n => n.NodeID);
return children.Union(children.SelectMany(GetChildren)).ToList();
}
更新1
public List<int> GetChildren(int id)
{
IEnumerable<RadioEntity> parent = GetRadio().Where(x => x.NodeID == id);
IEnumerable<int> children = (
from r in GetRadio()
where parent.Select(x=>x.RadioID)
.Contains(r.SourceRadioID)
select r
).Select(n => n.NodeID);
return children.Union(children.SelectMany(GetChildren)).ToList();
}