2016-06-21 2 views
2

내가 저장 프로 시저 (이전 질문 참조 전화 싶습니다.? 그러나 Question with stored procedure for Neo4J as the answer, 나는 꽤 유창 쿼리 인터페이스를 통해 그 일을하는 방법을 볼 수 없습니다를neo4jclient에서 저장 프로 시저를 호출하는 방법은 무엇입니까?

사람이 도와 줄 수

내 사이퍼 쿼리 : 최대 이제

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>() 
           }); 
+0

을 분류. 또한 UserAccount라는 레이블로 복잡하고 UserAccount를 반환합니다. – Mvde

+0

저는 제 자신을 생각 하겠지만 neo4jclient를 사용하여 얻은 직렬화를 정말 좋아합니다. 비록 당신이 예제를 가지고 스토어드 프로 시저를 호출했다면, 나는 그것을 볼 수있어서 기쁩니다. –

+0

나는 단지 그것을 보낸 다음 내 결과로 수업을 채 웁니다. 특별한 일을하고 싶다면 C# 라이브러리가 잘 작동하지 않습니다. 나는 C# 프로그래머이다. – Mvde

답변

1

내가을 떠날거야210 버전 아래에 있지만 버전 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>() }); 

이전 버전 (가능하면 피를)

당신이 IRawGraphClient을 시도해 봤어 나는 GitHub 버그에서 제안한 것처럼 제기 했습니까?

IRawGraphClient rgc = (IRawGraphClient) client; 

을 다음 쿼리를 호출 - 그것은 조금 투박하지만 이렇게 될 것이다 :

본질적으로 당신은 IRawGraphClient 인스턴스에 당신이 가지고있는 GraphClient 인스턴스를 캐스팅 할 수

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); 

I 작동하는을 생각해보십시오. 현재 3.0 테스트를 할 준비가 없으므로 100 % 확신 할 수는 없지만 시도해보십시오.

나는 .Call/ .Yield<T> 방법을 얻을 것을 목표로합니다

내가 데이터베이스에 너무 쉽게 사이퍼 querys를 보내 graphclient를 사용하지 않는 somepoint에게

+0

크리스에게 돌아와 줘서 고마워. 나는 질문을 제기 할 수있는 가장 좋은 곳 (여기 또는 github)을 알지 못했다. 나는 이것을 시도 할 것이다. IRawGraphClient를 docs 상태로 사용하는 것을 피하고 있습니다. 실제로 필요하지 않으면 언제든지 변경할 수 있지만 사용 가능한 경우라면 시도해 볼 것입니다. –

+0

예, 고통 스럽지만이 경우 가장 좋은 접근 방법입니다. 가능한 한 '통화'및 수확량을 높이고 올바른 접근 방식으로 되돌아 갈 수 있습니다. –

+0

나는 게시물을 작성했습니다. 도움이 될만한 게시물이 있습니다. http://geekswithblogs.net/cskardon/archive/2016/06/22/calling-stored-procs-in-neo4j-using-neo4jclient-ndashthe-hacky-way-again.aspx –

관련 문제