4

簡単にするために、ユーザーノードと大学ノードを含むNeo4jデータベースがあります-[:STUDENT_AT]関係を介してユーザーを大学に関連付けることができます。

特定のユーザーのユーザーの詳細と大学の詳細の両方を返したいと思います。この場合は、「username」値でクエリを実行します。

クエリ自体は正常に動作しますが、Neo4jClient でデシリアライザーを取得して、使用する 2 つのオブジェクトを取得するための正しい方法を見つけることができません。以下はうまくいくはずだと私が信じているものですが、残念ながらそうではありません。

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 への接続に成功した はどこgraphにありますか。IGraphClient

私が受け取るエラーは...

クエリ応答には列 User、University が含まれますが、<>f__AnonymousType0`2[[XYZ.Entities.User, XYZ.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[XYZ.Entities.University, XYZ. Entities、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null]] には、このデータを受け取るためにパブリックに設定できるプロパティが含まれていません。

要約すると、Neo4jClient を使用して複数の列を返す暗号クエリからオブジェクトを取得する方法を誰かが提供してくれたら、私は非常に感謝します!

4

2 に答える 2

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

ダミー集計タイプのプロパティ名は大文字と小文字が区別されることに注意してください。cypherRETURN句で使用する名前と正確に一致する必要があります。

これは明らかにばかげていますが、私にとってはこれだけでうまくいきました。Tuples からdynamicキーワードまですべてを試しました。

于 2013-02-15T21:19:40.220 に答える
1

匿名型は 1.0.0.514 以降で機能します。

アップグレードすると、質問に示されているクエリが書かれたとおりに機能します。

于 2013-04-02T13:29:04.720 に答える