Gremlin.NET查询编译错误:无法找到任何方法“ hasNext”

时间:2018-07-03 18:17:51

标签: gremlin

该行:g.V('1').out('knows').hasId('2').hasNext()

此行在Gremlin控制台中有效。

我尚未阅读Gremlin.NET中不存在hasNext的文档。我是否缺少某些东西,或者在Gremlin.NET中只是有另一种方法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

它尚不存在:

https://issues.apache.org/jira/browse/TINKERPOP-1921

主要原因与hasNext()是Java Iterator语义(不适用于.NET)有关。像.NET这样的Gremlin语言变体(GLV)在解释语言方面有一定的自由度,以便为使用它的开发人员提供最家的感觉。换句话说,如果您使用的是.NET GLV,那么您应该不会觉得自己在用Java进行编码,而应该感觉像是在用标准的.NET语义编写。

这就是说,正如上面提到的问题那样,可以争辩说,诸如hasNext()之类的东西是Gremlin作为查询语言的一种常见形式,因此应该在所有GLV中都可用。因此,当我们遇到这些选项时,我们将考虑这些选项。

对于.NET,我猜您会尝试像讨论的here那样检查Current

答案 1 :(得分:1)

目前,Gremlin.Net中确实缺少此方法。尽管文档中未明确说明,但文档does list all terminal steps implemented by Gremlin.Net

  
      
  • ITraversal.Next()
  •   
  • ITraversal.NextTraverser()
  •   
  • ITraversal.ToList()
  •   
  • ITraversal.ToSet()
  •   
  • ITraversal.Iterate()
  •   

hasNext也是这样的最终步骤,但是您可以看到它在此列表中丢失。

对于这种情况,我唯一能想到的解决方法是使用count步骤,然后在您的应用程序中检查返回的计数是否大于零:

var count = g.V("1").Out("knows").HasId("2").Count().Next();
var exists = count > 0;

在某些情况下,限制进入Count步骤的顶点数量也很有意义,因为您对确切的数量不感兴趣,只想知道是否至少存在一个顶点:

g.V("1").Out("knows").HasId("2").Limit<Vertex>(1).Count().Next();

这也是此功能的票据中建议的解决方法:TINKERPOP-1921