将 Neo4j 节点的 <id> 获取到 class
Get <id> of the Neo4j node into class
我的Class定义:
public class User{
public int Id {get;set;}
public string Name {get;set;}
}
我的密码:
MATCH (u:User)
WHERE id(u) = 15
RETURN u{.*, id:id(u)} as user
我的 C#.Net 代码:
var users = await graphClient.Cypher.Match("(u:User)").Where("id(u)=15).Return<User>(u => u.As<User>()).ResultAsync;
当我检查结果时,User.Id 总是 NULL。
注意:我没有在节点内创建和 Id 属性 但我想使用 Neo4j 的内置 Id。
您在浏览器中看到的 <id>
是底层 Neo4j ID,它不是正常的 属性 节点 Id
属性 User
class 将尝试获取。
为了得到你想要的东西,你必须对代码做更多的事情,事实上,你的 Cypher 中的大部分内容。
var users = await graphClient.Cypher
.Match("(u:User)")
.Where("id(u)=15")
.With("u{.*, Id:id(u)} AS user")
.Return(user => user.As<User>())
.ResultsAsync;
我将转换为 With
中的类型主要是因为这意味着我可以使用 .*
表示法,并且还允许我然后 return user.As<User>()
.
我也将 Id
属性 你 return 的大小写从 id:id(u)
更改为 Id:id(u)
- 就像你的 class 是大写。
我建议也为 Id 使用参数:
var users = await graphClient.Cypher
.Match("(u:User)")
.Where("id(u)=$id")
.With("u{.*, Id:id(u)} AS user")
.WithParam("id", 15)
.Return(user => user.As<User>())
.ResultsAsync;
因为它会让 Neo4j 的查询分析器识别出这是多次 运行 的同一个查询,并使您的查询更快。
现在 - 关于这一点,除非在极少数情况下,否则您真的不应该将 <id>
用作可查询参数。 <id>
可以指向不同时间的数据库。例如,如果您删除了此用户并添加了另一个用户,那么新用户可能会重用 <id>
。如果可以,请始终尝试找到另一个要使用的唯一 ID,在 .NET 中,Guid.NewGuid()
是 classics 之一,或者当然,对于用户 - 电子邮件地址往往是好的。
我的Class定义:
public class User{
public int Id {get;set;}
public string Name {get;set;}
}
我的密码:
MATCH (u:User)
WHERE id(u) = 15
RETURN u{.*, id:id(u)} as user
我的 C#.Net 代码:
var users = await graphClient.Cypher.Match("(u:User)").Where("id(u)=15).Return<User>(u => u.As<User>()).ResultAsync;
当我检查结果时,User.Id 总是 NULL。
注意:我没有在节点内创建和 Id 属性 但我想使用 Neo4j 的内置 Id。
您在浏览器中看到的 <id>
是底层 Neo4j ID,它不是正常的 属性 节点 Id
属性 User
class 将尝试获取。
为了得到你想要的东西,你必须对代码做更多的事情,事实上,你的 Cypher 中的大部分内容。
var users = await graphClient.Cypher
.Match("(u:User)")
.Where("id(u)=15")
.With("u{.*, Id:id(u)} AS user")
.Return(user => user.As<User>())
.ResultsAsync;
我将转换为 With
中的类型主要是因为这意味着我可以使用 .*
表示法,并且还允许我然后 return user.As<User>()
.
我也将 Id
属性 你 return 的大小写从 id:id(u)
更改为 Id:id(u)
- 就像你的 class 是大写。
我建议也为 Id 使用参数:
var users = await graphClient.Cypher
.Match("(u:User)")
.Where("id(u)=$id")
.With("u{.*, Id:id(u)} AS user")
.WithParam("id", 15)
.Return(user => user.As<User>())
.ResultsAsync;
因为它会让 Neo4j 的查询分析器识别出这是多次 运行 的同一个查询,并使您的查询更快。
现在 - 关于这一点,除非在极少数情况下,否则您真的不应该将 <id>
用作可查询参数。 <id>
可以指向不同时间的数据库。例如,如果您删除了此用户并添加了另一个用户,那么新用户可能会重用 <id>
。如果可以,请始终尝试找到另一个要使用的唯一 ID,在 .NET 中,Guid.NewGuid()
是 classics 之一,或者当然,对于用户 - 电子邮件地址往往是好的。