public string ObjectsReport() { Hashtable usedNodes = new Hashtable(); // Collect used nodes AddUsedNodesRecursive(LastSnapshotId(), usedNodes); StringBuilder sb = new StringBuilder(); foreach (Guid nodeId in usedNodes.Keys) { // We found a node which is not used and should be collected var node = provider.GetNode(nodeId, NodeAccess.Read); string line = nodeId.ToString() + "\t" + node.NodeType.ToString() + "\t"; var typeData = new EdgeData(EdgeType.OfType, null); if (node.Edges.ContainsKey(typeData)) { var typeEdge = node.FindEdge(typeData); if (typeEdge != null) { line += typesService.GetTypeFromIdCached(typeEdge.ToNodeId).Name + "\t"; } } sb.AppendLine(line); } return(sb.ToString()); }