如何在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
(今天刚刚发布),您可以直接使用 Call
和 Yield
:
_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>
方法排序到某个点
我想调用一个存储过程(请参阅上一个问题:
有人可以帮忙吗?
我的 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
(今天刚刚发布),您可以直接使用 Call
和 Yield
:
_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>
方法排序到某个点