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>()); }