示例#1
0
        /// <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));
        }
示例#2
0
        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));
 }