2014-01-13 3 views
1

동적으로 내 MATCHWHERE 절을 만들고 내 상황에서는 불행히도 내가해야 할 일이 있다는 것을 알고 있습니다. 그래서, (이와 같은 인위적인 예입니다) :동적으로 Neo4jclient에서 반환

var query = client 
    .Cypher 
    .Match("(u1:User)-[:LINKED]->(w:Web)","(u2:User)-[:LINKED]->(w:Web)","(u3:User)-[:LINKED]->(w:Web)") 
    .Where("u1.User.Id = {u1Param}").WithParam("u1Param", 1) 
    .AndWhere("u2.User.Id = {u2Param}").WithParam("u2Param", 2) 
    .AndWhere("u3.User.Id = {u3Param}").WithParam("u3Param", 3); 

MatchWhere 동적으로 사용자 입력에 기초하여 생성하고, 이는 올바른 사이퍼를 생성한다. (사이퍼에서) 서버에서

MATCH 
    (u1:User)-[:LINKED]->(w:Web), (u2:User)-[:LINKED]->(w:Web), (u3:User)-[:LINKED]->(w:Web) 
WHERE 
    u1.User.Id = 1 
    AND u2.User.Id = 2 
    AND u3.User.Id = 3 

내가 좋아하는 뭔가를 할 수 있습니다

RETURN u1, u2, u3 

을하고 내가 찾고 있어요 3 개 노드를 얻을 수 있습니다. 이있을 수 있습니다, 나는 단지 '3'응답이있을 것이라는 점을 모르는

query.Return(
    (u1, u2, u3) => 
    { 
     U1 = u1.As<User>(), 
     U2 = u2.As<User>(), 
     U3 = u3.As<User>() 
    }); 

다음 neo4jclient는 표현을 통해, 그래서, 내가 할 것 복제를 통해 내 문제는 Returning 데이터의 일반적인 방법입니다 더 많거나 적다. 이것을 달성하는 방법에 대한 아이디어가 있습니까? 있는 그대로 또는 완전히 다른 방식으로, 나는 모든 옵션에 열려 있습니다. 어쩌면

query.Return<User>("u1", "u2", "u3"); //returning IEnumerable<User> 

나 :

내가 좋아하는 뭔가를하고 싶습니다 내가 직접 HttpClient 또는 일부 등을 통해 DB를 호출 이러한 쿼리를 되돌릴 수 있습니다 알고

query.Return<User>("u1").AndReturn("u2").AndReturn("u3"); 

,하지만 난 할 수 있으면 오히려 그것을 피하십시오. 솔직히 말해서 나는 그들 모두를 dynamic에 파싱하는 것에 만족할 것이지만, 그것은 현재 불가능하다 (또는 그것 ??? ??? :)).

답변

2

Neo4jClient에는 이와 같은 동적 리턴 모양에 대한 좋은 해결책이 없습니다.

최소한이 인위적인 예제에서 노드를 단일 목록으로 병합 할 수 있습니까? 쉽게 어떤 알 수

.Return<IEnumerable<User>>("[u1, u2, u3]") 

WHERE 절에 사용하고 또한 C#에서 사용할 수 있습니다 것 Id 속성이있다.

+0

불행히도','에 대한 검사에서 예외가 발생합니다 : "호출 한 과부하는 ID (예 : foo)를 취하지 만 전달하려고 시도한 것처럼 보입니다 다중 열 문 (예 : foo, bar) " –

+0

그러나 예상대로 디버거에서 건너 뛰면 해결할 수있는 풀 요청을 넣습니다 ... –

+0

할 수 있습니다. 돌아 오십시오. ("[u1, u2, u3]")}). Results.SelectMany (r => r.Users)는 이상한 해결 방법입니다. :) –

관련 문제