1

我一直在为最近的一个项目使用 NEO4j 数据库。

最近,我们注意到 Cypher 查询比 Gremlin 运行得更快,因此我们决定转换我们的查询。我们正在使用 .Net 图形客户端运行查询。

我在转换为 Cypher 时遇到了一个 Gremlin 查询。

----Gremlin(这个工作并产生 Node(CustomerNode).... 的结果应该是 CustomerNode 周围的括号,但编辑器不会接受它)

        var results2 = graphClient.RootNode
            .Out<ApplicationNode>("HasApplications")
            .OutE("HasCompanies")
            .InV<CompanyNode>(p => p.Id == companyId, StringComparison.Ordinal)
            .Out<ConfigurationRootNode>("HasConfigurationRoot")
            .Out<CustomerNode>("HasCustomers")
            .As<CustomerNode>("Customer")
            .OutE("HasConfigurationStatuses")
            .InV<ConfigurationStatusNode>(p => p.Status == configStatus, StringComparison.Ordinal)
            .OutE("HasOpportunities")
            .InV<OpportunityNode>(p => p.ConfigurationId == configurationId, StringComparison.Ordinal)
            .BackV<CustomerNode>("Customer");

        var testResults2 = results2.ToList();

--------Cypher(见下文......这不起作用)

        var results = graphClient.Cypher.Start("root", "node(0)")
                                        .Match("(root)-[ha:HasApplications]->(Application)-[hs:HasCompanies]->Company-[hcr:HasConfigurationRoot]->(ConfigurationRoot)-[hc:HasCustomers]->(Customer)<-[hcs:HasConfigurationStatuses]-(ConfigurationStatus)<-[ho:HasOpportunities]-(Opportunity)")
                                        .Where<CompanyNode>(Company => Company.Id == companyId)
                                        .And().Where<ConfigurationStatusNode>(ConfigurationStatus => ConfigurationStatus.Status == configStatus)
                                        .And().Where<OpportunityNode>(Opportunity => Opportunity.ConfigurationId == configurationId);

        var x = results.Return<Node<CustomerNode>>("Customer").Results;

看来我的“匹配”属性可能设置不正确?我根本无法从 Cypher 查询中获得任何结果。这与我的其他查询不同.....这是唯一在 Gremlin 中执行 BackV 的查询。

任何帮助,将不胜感激!

谢谢!帕特里克

4

0 回答 0