2013-02-15 2 views
4

간단히하기 위해 [: STUDENT_AT] 관계를 통해 사용자가 대학과 관련 될 수있는 사용자 노드와 대학 노드가 포함 된 Neo4j 데이터베이스가 있습니다.Neo4jClient 쿼리 결과에서 여러 열 처리하기

특정 사용자에 대한 사용자 세부 정보와 대학 세부 정보 (이 경우 '사용자 이름'값으로 쿼리)를 모두 반환하려고합니다.

쿼리 자체가 정상적으로 작동하지만 두 개체가 작동하도록 Neo4jClient에서 deserialiser를 가져 오는 올바른 방법을 찾지 못했습니다. 아래는 내가해야한다고 생각하는 것입니다. 그러나 - 아아 - 그렇지 않습니다.

graph.Cypher 
    .Start("user", "node(*)") 
    .Match("user-[:STUDENT_AT]->university") 
    .Where<User>(user => 
     user.Username != null && 
     user.Username.ToLower() == username.ToLower()) 
    .Return((user, university) => new 
    { 
     User = user.As<User>(), 
     University = university.As<University>() 
    }) 
    .Results; 

는 성공적으로 Neo4j에 연결 않은 IGraphClient입니다.

쿼리 응답이 열 사용자를 포함

I가받을 오류 ..., 대학교 그러나 <> f__AnonymousType0`2 [[XYZ.Entities.User, XYZ.Entities, 버전 = 1.0.0.0 , 문화권 = 중립, PublicKeyToken = null], [XYZ.Entities.University, XYZ.Entities, 버전 = 1.0.0.0, 문화 = 중립, PublicKeyToken = null]]이 데이터를 수신하기 위해 공개적으로 설정 가능한 속성을 포함하고 있지 않습니다.

그래서 요약, 사람이 나는 매우 감사 할 것 Neo4jClient를 사용하여 여러 열을 반환하는 사이퍼 쿼리에서 개체를 얻기의 방법으로 날을 제공 할 수 있다면!

+0

어쩌면 바보 같은 질문 일지 모르지만, C# 클래스에 존재하지 않는 (또는 적어도 공개적으로 공개되지 않은) 대학 또는 사용자 Neo4j 노드의 속성을 가질 수 있습니까? – baldric

+0

나는 그것이 그럴 수도 있다고 생각했다. 그러나 한 가지 유형의 노드를 반환하는 간단한 쿼리 만 사용해도 문제가 없다. 속성을 맵핑 할 때 문제가 발생했다면 예외가 발생합니다. –

답변

1

익명 유형은 1.0.0.514부터 작동합니다.

업그레이드 및 질문에 표시된 쿼리는 쓰여진대로 작동합니다.

2

내가 작동하도록 할 수 있었던 유일한 방법은 필자가 필요로하는 여러 열의 집합 인 유형을 실제로 선언하는 것이 었습니다. 예를 들어, User 속성과 University 속성이 포함 된 더미 형식을 선언해야합니다. 귀하의 경우에 당신은 시도 할 수 있습니다 : 당신의 더미 집계 유형의 속성 이름은 대소 문자를 구분

private class UserAndUniversity { 
    public User User {get; set;} 
    public University University {get; set;} 
} 

public object MyMethod() 
{ 
    graph.Cypher 
    .Start("user", "node(*)") 
    .Match("user-[:STUDENT_AT]->university") 
    .Where<User>(user => 
     user.Username != null && 
     user.Username.ToLower() == username.ToLower()) 
    .Return((user, university) => new UserAndUniversity 
    { 
     User = user.As<User>(), 
     University = university.As<University>() 
    }) 
    .Results; 
} 

참고; 그들은 사이퍼의 이름 인 RETURN 절과 정확히 일치해야합니다.

이것은 분명히 바보 같지만 그것은 나를 위해 일한 유일한 것입니다. 튜플에서 dynamic 키워드까지 모든 것을 시도했습니다.

+0

감사합니다. 그냥 시도해 보니 좋았지 만, 네가 옳은 것 같아서 이것이 효과를 발휘할 수있는 유일한 방법이라고 생각된다./나는 투표를 하겠지만 내 평판은 충분히 높지는 않다. –

+0

@ ean5533 1.0.0.514 이상에서 해결되었습니다. –