public override async Task <GraphReply> GetGraph(GraphRequest request, ServerCallContext context) { if (_displayedNodes == null) { var allAccession = new HashSet <string>(await _driver.ListResultAccession()); _displayedNodes = _graph.Reader.Vertices.Where(v => allAccession.Contains(v.Value)).Select(v => v.Key) .ToHashSet(); } var nodeLineages = await _driver.GetLineageByAccession(); var response = new GraphReply(); response.Graph = _graph.GetSimplifiedGraph(request.ClusteringLevel, v => _displayedNodes.Contains(v)); response.Lineages.AddRange(response.Graph.Nodes.Where(v => nodeLineages.ContainsKey(v.Name)).Select(v => { var lineage = new GraphLineage { Id = v.Id }; lineage.Lineages.AddRange(nodeLineages[v.Name]); return(lineage); })); return(response); }