5
이것은 내 첫번에 LINQ
에 관한 소식입니다. 제발 친절 해주세요.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
예상되는 결과는 노드 ID : 2 and 11
입니다.
NodeID = 2
은 NodeID = 1
에 속하는 RadioID = R0
에 연결된 RadioID = R7
이 있기 때문에 포함됩니다. RadioID = R11
NodeID = 2
이 속하는 Radio = R9
(도 NodeID = 1
접속된다 )으로 연결되어 있기 때문에
NodeID = 11
도 포함된다.
이 기사를 조회하지만 난 항상 StackOverFlowException
를 얻을 여기에 전체 코드입니다 :
public class RadioEntity
{
public string RadioID { get; set; }
public int NodeID { get; set; }
public string SourceRadioID { get; set; }
}
public class SampleDemo
{
public void SampleMethod()
{
Func<int, int,List<int>> GetChildNode = null;
GetChildNode = (x, y) =>
{
return (from _x in GetRadio()
where (GetRadio().Where(i => i.NodeID == x).Select(i => i.RadioID)).Contains(_x.RadioID)
from _y in new[] { _x.NodeID }.Union(GetChildNode(_x.NodeID, y + 1))
select _y).ToList<int>();
};
var _res = GetChildNode(1, 0);
}
public List<RadioEntity> GetRadio()
{
List<RadioEntity> _returnVal = new List<RadioEntity>();
_returnVal.Add(new RadioEntity() { RadioID = "R0", NodeID = 1, SourceRadioID = "" });
_returnVal.Add(new RadioEntity() { RadioID = "R1", NodeID = 1, SourceRadioID = "" });
_returnVal.Add(new RadioEntity() { RadioID = "R2", NodeID = 1, SourceRadioID = "" });
_returnVal.Add(new RadioEntity() { RadioID = "R3", NodeID = 1, SourceRadioID = "" });
_returnVal.Add(new RadioEntity() { RadioID = "R4", NodeID = 1, SourceRadioID = "" });
_returnVal.Add(new RadioEntity() { RadioID = "R5", NodeID = 2, SourceRadioID = "" });
_returnVal.Add(new RadioEntity() { RadioID = "R6", NodeID = 2, SourceRadioID = "" });
_returnVal.Add(new RadioEntity() { RadioID = "R7", NodeID = 2, SourceRadioID = "R0" });
_returnVal.Add(new RadioEntity() { RadioID = "R8", NodeID = 2, SourceRadioID = "" });
_returnVal.Add(new RadioEntity() { RadioID = "R9", NodeID = 2, SourceRadioID = "" });
_returnVal.Add(new RadioEntity() { RadioID = "R10", NodeID = 11, SourceRadioID = "" });
_returnVal.Add(new RadioEntity() { RadioID = "R11", NodeID = 11, SourceRadioID = "R9" });
_returnVal.Add(new RadioEntity() { RadioID = "R12", NodeID = 11, SourceRadioID = "" });
_returnVal.Add(new RadioEntity() { RadioID = "R13", NodeID = 11, SourceRadioID = "" });
return _returnVal;
}
}
그것을 할 수있는 더 나은 방법이 있는지 당신이 제안 할 수 있습니다 . 미안 새내 여기.
어떻게이 아이의 아이를 점점 하나? –
좋은 사람을 위해이 사람을 어떻게 투표합니까? –
그냥 휴식, downvotes는 개인적인 공격이 아니며, 주어진 답변 이외의 다른 의미가 아니라 정확하고 질문에 대답하지 않습니다. –