public static GraphTraversal <Vertex, IDictionary <string, T> > SelectBy <T>(this GraphTraversal <Vertex, Vertex> t, string[] selectKey) { var trav = new GraphTraversal <Vertex, IDictionary <string, T> >(); var aliases = new List <string>(); var properties = new List <string>(); foreach (var key in selectKey) { var arrStr = key.Split("."); if (string.IsNullOrEmpty(key) || arrStr.Length % 2 != 0) { throw new ArgumentException("The selectKey must be non-null and in the format <alias name>.<property name>"); } aliases.Add(arrStr[0]); properties.Add(arrStr[1]); } if (aliases.Count == 2) { trav = t.Select <T>(aliases[0], aliases[1]); } else if (aliases.Count > 2) { trav = t.Select <T>(aliases[0], aliases[1], aliases.GetRange(2, aliases.Count - 2).ToArray()); } foreach (var prop in properties) { trav = trav.By(prop); } return(trav); }