如何在neo4jclient中调用存储过程?

How to call a stored procedure in neo4jclient?

我想调用一个存储过程(请参阅上一个问题:但是,我不太明白通过流畅的查询界面执行此操作的方法。

有人可以帮忙吗?

我的 Cypher 查询:

MATCH(user:UserAccount)-[:HasPermission]->(permission:Permission)
WITH user, collect(permission) as permissions
CALL apoc.map.setKey( user, 'permissions', permissions ) YIELD value as UserAccount
RETURN UserAccount

到目前为止我的 Neo4jClient 代码:

 _graphClient
            .Cypher
            .Match("(user:UserAccount)-[:HasPermission]->(permission:Permission)")
            .With("user, collect(permission) as permissions")
            // I need to call the stored procedure here.
            .ReturnDistinct(
                (userAccount) =>
                                new
                                {
                                    UserAccount = userAccount.As<UserAccount>()
                                });

我将在下面保留 IRawGraphClient 版本,但是对于版本 1.1.0.39(今天刚刚发布),您可以直接使用 CallYield

_graphClient.Cypher
    .Match("(user:UserAccount)-[:HasPermission]->(permission:Permission)")
    .With("user, collect(permission) as permissions")
    .Call("apoc.map.setKey(user, 'permissions', permissions)").Yield("value AS UserAccount")
    .ReturnDistinct(
        (userAccount) => new { UserAccount = userAccount.As<UserAccount>() });

旧版本(如果可以避免)

您是否尝试了我在您提出的 GitHub 错误中建议的 IRawGraphClient

本质上,您可以将 GraphClient 实例转换为 IRawGraphClient 实例:

IRawGraphClient rgc = (IRawGraphClient) client;

然后调用查询 - 它有点笨拙,但会像这样:

var queryText = @"MATCH(user:UserAccount)-[:HasPermission]->(permission:Permission) 
WITH user, collect(permission) as permissions
CALL apoc.map.setKey( user, 'permissions', permissions ) YIELD value as UserAccount
RETURN UserAccount"

var cypherQuery = new CypherQuery(queryText, null, CypherResultMode.Projection);
var results = rgc.ExecuteGetCypherResults<UserAccount>(cypherQuery);

认为 会起作用 - 我目前没有 3.0 设置可以测试,所以不能 100% 确定,但请试试看.

我的目标是让 .Call/.Yield<T> 方法排序到某个点