/// <summary> /// Возвращает множество узлов, которые подходят по иерархии с заданными связями /// </summary> /// <param name="node">Узел части фрейма.</param> /// <param name="toRelation">Связь части фрейма.</param> /// <param name="fromRelation">Узлы со связями которые надо найти.</param> /// <returns>Множество узлов.</returns> private static IEnumerable <IReadOnlyNode> GetRelevant(IReadOnlyNode node, string toRelation, string fromRelation) { return(node.To(toRelation) .SelectMany(x => x.From(fromRelation)) .Union(node .To(toRelation) .SelectMany(x => x .ToIsANestedFrom(fromRelation) .Union(x .FromIsANested() .Where(y => y.Name != Nodes.MainFrameNode) .SelectMany(y => y.From(fromRelation)) ) ) )); }
/// <summary> /// Возвращает коллекцию узлов, которые вложенно входят по указанной связи. /// </summary> /// <param name="node">Узел</param> /// <param name="relationName"></param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection ToNested(this IReadOnlyNode node, string relationName) { var nodeCollection = node.To(relationName).ToList(); var result = new List <IReadOnlyNode>(nodeCollection); foreach (var readOnlyNode in nodeCollection) { result.AddRange(readOnlyNode.ToNested(relationName)); } return(new NodeCollection(result)); }
/// <summary> /// Возвращает коллекцию узлов, которые входят в указанный узел по связи <see cref="Relations.Has"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection ToHas(this IReadOnlyNode node) { return(node.To(Relations.Has)); }
/// <summary> /// Возвращает коллекцию узлов, которые входят в указанный узел по связи <see cref="Relations.Agent"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection ToAgent(this IReadOnlyNode node) { return(node.To(Relations.Agent)); }
/// <summary> /// Возвращает коллекцию узлов, которые входят в указанный узел по связи <see cref="Relations.Locative"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection ToLocative(this IReadOnlyNode node) { return(node.To(Relations.Locative)); }
/// <summary> /// Возвращает коллекцию узлов, которые входят в указанный узел по связи <see cref="Relations.Object"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection ToObject(this IReadOnlyNode node) { return(node.To(Relations.Object)); }
/// <summary> /// Возвращает коллекцию узлов, которые входят в указанный узел по связи <see cref="Relations.Order"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection ToOrder(this IReadOnlyNode node) { return(node.To(Relations.Order)); }
/// <summary> /// Возвращает коллекцию узлов, которые входят в указанный узел по связи <see cref="Relations.IsA"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection ToIsA(this IReadOnlyNode node) { return(node.To(Relations.IsA)); }
/// <summary> /// Возвращает коллекцию узлов, которые входят в указанный узел по связи <see cref="Relations.APartOf"/>. /// </summary> /// <param name="node">Узел</param> /// <returns>Коллекция узлов.</returns> public static IReadOnlyNodeCollection ToAPartOf(this IReadOnlyNode node) { return(node.To(Relations.APartOf)); }