У меня есть набор узлов, и каждый узел может иметь родительский узел. Если родительский узел существует, я хотел бы вставить его в качестве дочернего элемента (то есть: родитель стал бы его собственным дочерним элементом), но я изо всех сил пытаюсь найти способ сделать это с помощью linq, если это возможно.Создайте коллекцию, которая включает себя
Моя не LINQ попытка:
private IList<IPageNode> addParentNode(IList<IPageNode> nodes) {
if (nodes[0].parent == null) return nodes;
var parentWithoutChildren = new PageNode {
name = nodes[0].parent.name,
isNavigable = nodes[0].parent.isNavigable,
url = nodes[0].parent.url,
children = null,
parent = null
};
nodes.Insert(0, parentWithoutChildren);
return nodes;
}
То, что я до сих пор работает, но есть два выпуска:
- Это не с помощью LINQ и я предполагаю, что LINQ будет наиболее эффективным/эффективный способ добиться этого.
- Объект, который прошел, обрабатывается, изменяется и возвращается, и я не могу этого добиться. Я знаю, что могу просто создать новый объект и вернуть его, но я хотел бы узнать что-то новое, если это возможно.
«Это не с linq, и я хочу, чтобы это было». - Почему каждый всегда думает, что linq является ответом на каждую проблему? Это действительно не так. LINQ - отличный инструмент, когда он используется в правильных местах. Это не означает **, что вы должны искать * другие места *, чтобы использовать его. Иногда вы должны использовать * другие инструменты *. –
Неплохая идея изменить исходную коллекцию в выражении linq. Итерационный процесс становится хрупким, если исходные итерации изменяются самой итерацией. Вероятно, вы захотите взять удар и либо собрать неровные узлы как часть этапа предварительной обработки, либо просто написать свой запрос, чтобы он знал, что делать с нечеткими узлами. – theodox
@MarcGravell Я согласен с вами. Возможно, я должен перефразировать это. То, что я действительно пытаюсь сказать, это то, что я хотел бы сделать это самым эффективным/эффективным способом, и я был презумптивным, но я думал, что это с linq. – bflemi3