Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不了解如何在Gremlin.net中使用Tree()_C#_Gremlin - Fatal编程技术网

C# 不了解如何在Gremlin.net中使用Tree()

C# 不了解如何在Gremlin.net中使用Tree(),c#,gremlin,C#,Gremlin,我正在尝试将以下示例翻译成Gremlin.net(c#) 示例使用Groovy t=g.V().hasLabel('root').repeat(out()).emit().tree().by('data').next() 文档声明t的类型应为 class org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree 但我在gremlin.net中找不到对等类型 Gremlin.Process.Traversal下面只有一个策略名

我正在尝试将以下示例翻译成Gremlin.net(c#)

示例使用Groovy

t=g.V().hasLabel('root').repeat(out()).emit().tree().by('data').next()
文档声明t的类型应为

class org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree
但我在gremlin.net中找不到对等类型

Gremlin.Process.Traversal下面只有一个策略名称空间,我在别处似乎找不到任何树类型

我正在运行Gremlin服务器和一个带有Gremlin.net的c#项目

public void Test()
    {
        using(GremlinClient client = GetClient())
        {
            using (DriverRemoteConnection conn = GetDriverRemoteConnection(client))
            {
                Graph graph = new Graph();
                GraphTraversalSource g = graph.Traversal().WithRemote(conn);

                // Builds a small ordered Binary (BST) Tree
                g.AddV("root").Property("data", 9).As("root")
                    .AddV("node").Property("data", 5).As("b")
                    .AddV("node").Property("data", 2).As("c")
                    .AddV("node").Property("data", 11).As("d")
                    .AddV("node").Property("data", 15).As("e")
                    .AddV("node").Property("data", 10).As("f")
                    .AddV("node").Property("data", 1).As("g")
                    .AddV("node").Property("data", 8).As("h")
                    .AddV("node").Property("data", 22).As("i")
                    .AddV("node").Property("data", 16).As("j")
                    .AddE("left").From("root").To("b")
                    .AddE("left").From("b").To("c")
                    .AddE("right").From("root").To("d")
                    .AddE("right").From("d").To("e")
                    .AddE("right").From("e").To("i")
                    .AddE("left").From("i").To("j")
                    .AddE("left").From("d").To("f")
                    .AddE("right").From("b").To("h")
                    .AddE("left").From("c").To("g").Iterate();
                //the .Tree() step requires either a string argument (I believe as a step label), or can be used taking a Generic .Tree<someType>() but I do not know what type to declare to match the example.
                var tree = g.V().HasLabel("root").Repeat(__.Out()).Emit().Tree("a").By("data").Next();

                Type x = tree.GetType();
                // x == {Gremlin.Net.Structure.Vertex}
            }
        }
    }
公共无效测试()
{
使用(GremlinClient client=GetClient())
{
使用(DriverRemoteConnection conn=GetDriverRemoteConnection(客户端))
{
图形=新图形();
GraphTraversalSource g=graph.Traversal().WithRemote(conn);
//构建小型有序二叉树(BST)
g、 AddV(“根”)。属性(“数据”,9)。作为(“根”)
.AddV(“节点”)。属性(“数据”,5)。作为(“b”)
.AddV(“节点”)。属性(“数据”,2)。作为(“c”)
.AddV(“节点”)。属性(“数据”,11)。作为(“d”)
.AddV(“节点”)。属性(“数据”,15)。作为(“e”)
.AddV(“节点”)。属性(“数据”,10)。作为(“f”)
.AddV(“节点”)。属性(“数据”,1)。作为(“g”)
.AddV(“节点”)。属性(“数据”,8)。作为(“h”)
.AddV(“节点”)。属性(“数据”,22)。作为(“i”)
.AddV(“节点”)。属性(“数据”,16)。作为(“j”)
.AddE(“左”)从(“根”)添加到(“b”)
将(左)段从(b)段添加到(c)
.将(“权利”)从(“根”)添加到(“d”)
添加从(“d”)到(“e”)的(“权利”)
添加从(“e”)到(“i”)的(“权利”)
.AddE(左)从(i)到(j)
.从(d)至(f)添加(左)
.将(“权利”)从(“b”)添加到(“h”)
.AddE(“左”)。从(“c”)到(“g”)。迭代();
//.Tree()步骤需要一个字符串参数(我认为是一个步骤标签),或者可以用于获取泛型.Tree(),但我不知道要声明什么类型来匹配该示例。
var tree=g.V().HasLabel(“根”).Repeat(_uu.Out()).Emit().tree(“a”).By(“数据”).Next();
类型x=tree.GetType();
//x=={Gremlin.Net.Structure.Vertex}
}
}
}

我错过了什么

我认为您遇到了在完整的Gremlin虚拟机(即Java)范围内开发的Gremlin与作为Gremlin语言变体的Gremlin之间的一个剩余不一致之处—在您的例子中,就是Gremlin.NET。我不认为
tree()
在任何GLV中都有完全的支持。有趣的是,您显示了您正在返回一个
顶点
,因为我本以为会出现某种形式的序列化错误,因为我认为Gremlin.NET甚至不知道如何反序列化。即使是这样,我们在.NET中也没有一个
对象来反序列化它

我似乎还记得
tree()
和序列化的问题更深入,并根源于Jackson库中的一些问题,但这些问题可能都在最近解决了

请注意,
子图()
-步骤也会遇到类似的限制,因为GLV端没有
图形
对象可将其反序列化。我想知道在这些情况下,我们是否不能至少默认返回原始JSON本身。手动解析并不有趣,但在某些用例中可能比什么都不解析要好


我已经为持续跟踪创建了这个问题。

今天我尝试了大约100种不同的方法,但多次出现序列化错误,所以这确实是个好消息。谢谢你的回复。既然如此。我在数据库中有一个单亲树结构,我想从根中提取树的一部分,以便在屏幕上绘制它们。树将允许我将属性信息检索到维护父子关系的结构中。在没有该用例的情况下,您对该用例有什么建议吗?最后,返回JSON时+1,或者至少可以选择一些其他序列化格式。我的用例需要序列化为json以进行传输。C#是一种相当令人愉快的序列化语言。正如Daniel Kuppitz刚刚对我说的,“一个
只是一个压缩的
路径列表
”,所以你可以使用
路径()
,然后尝试在客户端重建你自己的“树”形式。