Ошибка компиляции запроса Gremlin.NET: невозможно найти какой-либо метод hasNext - PullRequest
0 голосов
/ 03 июля 2018

Линия: g.V('1').out('knows').hasId('2').hasNext()

Эта точная строка работает в консоли Gremlin.

Я не читал в документации, что hasNext не существует в Gremlin.NET. Я что-то упустил или есть просто другой способ сделать это в Gremlin.NET?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Этот метод действительно отсутствует в Gremlin.Net прямо сейчас. Хотя это явно не указано в документации, в документации перечислены все шаги терминала, реализованные 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 .

0 голосов
/ 03 июля 2018

Еще не существует:

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

Основная причина связана с тем, что hasNext() - это семантика Java Iterator, которая не была применена к .NET. Языковые варианты Gremlin (GLV), такие как .NET, имеют некоторую свободу в отношении того, как они интерпретируют язык, чтобы обеспечить наиболее удобное ощущение для разработчиков, использующих его. Другими словами, если вы используете .NET GLV, вы не должны чувствовать, что кодируете на Java, но вместо этого должны чувствовать себя как дома со стандартной семантикой .NET.

При этом можно утверждать, что, как и в вышеупомянутой проблеме, что-то вроде hasNext() является распространенной формой Gremlin как языка запросов и поэтому должно быть доступно во всех GLV. Итак, мы рассмотрим эти варианты по мере их поступления.

Для .NET, я думаю, вы попытаетесь проверить Current, как обсуждено здесь .

...