处理Neo4jClient查询结果中的多列

本文关键字:结果 Neo4jClient 查询 处理 | 更新日期: 2023-09-27 17:59:38

我有一个Neo4j数据库,为了简单起见,它包含用户节点和大学节点,其中用户可以通过[:STUDENT_AT]关系与大学相关。

我想返回特定用户的用户详细信息和大学详细信息,在本例中通过"username"值进行查询。

查询本身运行良好,但我无法找到在Neo4jClient中获得deserializer的正确方法,以便为我提供两个要处理的对象。以下是我认为应该有效的方法,但——唉——它没有。

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;

其中,CCD_ 1是已经成功连接到Neo4j的CCD_ 2。

我收到的错误是…

查询响应包含列"用户"、"大学"<>f_AnonymousType0`2[[XYZ.Enties.User,XYZ.Eentities,Version=1.0.0.0,区域性=中性,PublicKeyToken=null],[XYZ.Entities.University,XYZ.Eentities,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]不公开包含接收此数据的可设置属性。

总之,如果有人能为我提供一种从使用Neo4jClient返回多列的密码查询中获取对象的方法,我将不胜感激!

处理Neo4jClient查询结果中的多列

我能让它工作的唯一方法是实际声明一个类型,它是我需要的多个列的集合。例如,您需要声明一个包含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子句中使用的名称精确匹配

这显然很愚蠢,但这是唯一对我有用的东西;我尝试了从Tuples到dynamic关键字的所有内容。

匿名类型从1.0.0.514开始工作。

升级后,问题中显示的查询将按编写的方式工作。