2013-03-30 3 views
0

값을 꺼내 매개 변수로 넣지 않는 Where 절에 문제가 있습니다.neo4jclient where 절에 매개 변수를 넣지 마십시오.

return 
    startingNode 
    .StartCypher("startNode") 
    .Match(matchQuery) 
    .Where<TSourceNode>(otherStartNodes => otherStartNodes.Id != startingNode.Data.Id)     
    .Return<TSourceNode>("otherStartNodes").Results;       

쿼리 문자열 OUT "WHERE (ID <> 아이디)"처럼 보이는 제공됩니다. 나는 람다를 사용하고 그냥

.Where("startNode.Id <> otherStartNodes.Id") 

작동하지 않은 이유는 아래의 라인을 시도했습니다 보려면 아래 코드를 사용하지만, 내가 관심하지 않음으로써 쉽게 문제를 해결할 수 있지만 작동하지 않았다 어느 한 쪽.

.Where<TSourceNode, TSourceNode>((otherStartNodes, startNode) => otherStartNodes.Id != startNode.Id)  

편집 Tatham은 -이 대한의 Bitbucket에 문제를 만들었습니다.

Where 절이 올바른 방법이어야합니다.

.Where<TSourceNode, TSourceNode>((otherStartNodes, startNode) => otherStartNodes.Id != startNode.Id)) 

답변

1

업데이트 :이 위 1.0.0.525 및 고정, issue 73입니다.

오히려 역동적 인 쿼리에 대해 내가 언급 한 세 번째 옵션 (.Where<TSourceNode, TSourceNode>((otherStartNodes, startNode) => otherStartNodes.Id != startNode.Id))이 올바른 것입니다.

이렇게하면됩니다. Neo4jClient에서 단위 테스트를 추가하여 다음과 같이 주장했습니다. https://bitbucket.org/Readify/neo4jclient/commits/cc73ce253ddce89e69785caa68f5e4660a622b96

왜 작동하지 않는지 설명 할 수 있습니까? 결과 쿼리 텍스트는 무엇입니까?


.Where<TSourceNode>(otherStartNodes => otherStartNodes.Id != startingNode.Data.Id)에 대한 값이 잘못되었습니다. .NET에서 startingNode.Data.Id을 한 번 평가 한 다음 WHERE otherStartNodes.Id <> {p1}과 같은 것을 전송해야합니다. 나는 이것을 별도로 시험 할 것이다.

+0

결과 쿼리 텍스트는 '올바른 것'을 사용했을 때와 동일한 "Where (Id <> Id)"를 생성했습니다. TSourceNode가 제네릭 형식이고 그 이름을 올바르게 한정하지 않아서 문제가 발생한 것일 수 있습니까? 내가 작업하고있는 프로젝트는 오픈 소스이므로 테스트를 추가하고 링크를 통해 보냅니다. 건배. – Brenton

관련 문제