处理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返回多列的密码查询中获取对象的方法,我将不胜感激!
我能让它工作的唯一方法是实际声明一个类型,它是我需要的多个列的集合。例如,您需要声明一个包含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开始工作。
升级后,问题中显示的查询将按编写的方式工作。