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