/// <summary> /// Возвращает коллекцию узлов, которые вложенно исходят по указанной связи. /// </summary> /// <param name="node">Узел</param> /// <param name="relationName"></param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection FromNested(this IReadOnlyNode node, string relationName) { var nodeCollection = node.From(relationName).ToList(); var result = new List <IReadOnlyNode>(nodeCollection); foreach (var readOnlyNode in nodeCollection) { result.AddRange(readOnlyNode.FromNested(relationName)); } return(new NodeCollection(result)); }
private static List <IReadOnlyRelation> GetRelations(IReadOnlyNode node, IReadOnlyNode nodeToFind, string relation, bool isFrom) { if (node.From(relation).Any(currentNode => currentNode == nodeToFind)) { return(new List <IReadOnlyRelation> { node.FromRelations.First(x => x.To == nodeToFind) }); } foreach (var currentNode in isFrom ? node.FromIsA() : node.ToIsA()) { var relations = GetRelations(currentNode, nodeToFind, relation, isFrom); if (relations.Count <= 0) { continue; } var toNode = node.ToRelations.FirstOrDefault(x => x.From == currentNode); var fromNode = node.FromRelations.FirstOrDefault(x => x.To == currentNode); relations.Add(isFrom ? fromNode : toNode); return(relations); } return(new List <IReadOnlyRelation>()); }
/// <summary> /// Возвращает коллекцию узлов, которые исходят из указанного узла по связи <see cref="Relations.Has"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection FromHas(this IReadOnlyNode node) { return(node.From(Relations.Has)); }
/// <summary> /// Возвращает коллекцию узлов, которые исходят из указанного узла по связи <see cref="Relations.Agent"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection FromAgent(this IReadOnlyNode node) { return(node.From(Relations.Agent)); }
/// <summary> /// Возвращает коллекцию узлов, которые исходят из указанного узла по связи <see cref="Relations.Locative"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection FromLocative(this IReadOnlyNode node) { return(node.From(Relations.Locative)); }
/// <summary> /// Возвращает коллекцию узлов, которые исходят из указанного узла по связи <see cref="Relations.Object"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection FromObject(this IReadOnlyNode node) { return(node.From(Relations.Object)); }
/// <summary> /// Возвращает коллекцию узлов, которые исходят из указанного узла по связи <see cref="Relations.Order"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection FromOrder(this IReadOnlyNode node) { return(node.From(Relations.Order)); }
/// <summary> /// Возвращает коллекцию узлов, которые исходят из указанного узла по связи <see cref="Relations.IsA"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection FromIsA(this IReadOnlyNode node) { return(node.From(Relations.IsA)); }
/// <summary> /// Возвращает коллекцию узлов, которые исходят из указанного узла по связи <see cref="Relations.APartOf"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection FromAPartOf(this IReadOnlyNode node) { return(node.From(Relations.APartOf)); }