Dies ist mein erstes Mal zu hören über LINQ
und ich habe keine Ahnung davon. Bitte sei sanft zu mir.Holen Sie sich einen Kinder-Rekord mit Linq
Ich habe diesen Datensatz.
+---------+--------+---------------+
| 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 | |
+---------+--------+---------------+
Was ich tun muss, ist es, ein Verfahren zu schreiben, die eine Liste von NodeID
zurückgibt. Beispiel:
List<int> dependentNode = GetChildNode(1); // int ParentNode
Meine erwarteten Ergebnisse sind NodeIDs: 2 and 11
.
NodeID = 2
ist enthalten, da es eine RadioID = R7
gibt, die mit RadioID = R0
verbunden ist, die zu NodeID = 1
gehört.
NodeID = 11
ist ebenfalls enthalten, weil RadioID = R11
zu Radio = R9
verbunden ist, die zu NodeID = 2
gehört (die auch NodeID = 1
verbunden ist).
ich diesen Artikel nachschlagen, aber ich bekomme immer StackOverFlowException
Hier ist der vollständige Code:
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;
}
}
Sie können vorschlagen, wenn es viel besseren Weg, es zu tun . Entschuldigung Neuling hier.
wie ist das die Kinder Kinder bekommen? –
Wie wird dieser Kerl für das größere Gut abstimmen? –
einfach entspannen, downvotes sind keine persönlichen Angriff, sie bedeuten nichts anderes als die Antwort gegeben ist nicht korrekt und beantwortet die Frage nicht. –