C# 示例查询代码
本示例展示了如何使用 ExecutableQuery API 从 .NET 应用程序查询 Neo4j,并将查询结果直接映射到强类型 C# 记录 (record) 中。您将学习如何:
- 使用 .NET 驱动程序连接到 Neo4j 数据库
- 编写并执行参数化的 Cypher 查询
- 配置目标数据库并传递参数
- 自动将 Neo4j 结果映射到领域对象 (BookReview)
- 循环遍历映射后的结果并在应用程序中使用它们

代码示例
以下是完整代码,随后将详细介绍连接、查询、映射及处理 Neo4j 数据的全过程。
using Neo4j.Driver;
using Neo4j.Driver.Mapping;
//Create a driver instance supplying where to connect to and the authentication details
var driverInstance = GraphDatabase.Driver(new Uri("neo4j+s://demo.neo4jlabs.com"),
AuthTokens.Basic("goodreads", "goodreads"));
string queryString = @"MATCH (r:Review)-[:WRITTEN_FOR]->(b:Book)<-[:AUTHORED]-(a:Author)
WHERE a.name = $name
RETURN b.title AS Title, r.text AS ReviewText, r.rating As Rating
ORDER BY r.rating DESC
LIMIT 20";
//Run the Cypher query, supplying it with a target database, required parameters, and //receive back the results mapped to your applications domain specific type.
var bookReviews = await driverInstance
.ExecutableQuery(queryString)
.WithConfig(new QueryConfig(database: "goodreads"))
.WithParameters(new {name = "Stephen King"})
.ExecuteAsync()
.AsObjectsAsync<BookReview>();
//Do something with the results
bookReviews.ToList().ForEach(br => Console.WriteLine($"Title = {br.Title}"));
//Domain type declaration
record BookReview(string Title, string ReviewText, int Rating); Code language: C# (cs)
使用 .NET 驱动程序查询 Neo4j 书评数据
1. 导入必要的命名空间
using Neo4j.Driver;
using Neo4j.Driver.Mapping;Code language: C# (cs)
这些命名空间提供了:
- 核心驱动程序功能(IDriver、会话、身份验证)
- 将查询结果自动映射为类型化对象
2. 创建 Neo4j 驱动程序实例
var driverInstance = GraphDatabase.Driver(
new Uri("neo4j+s://demo.neo4jlabs.com"),
AuthTokens.Basic("goodreads", "goodreads"));Code language: C# (cs)
- 连接到加密的 Neo4j 实例 (neo4j+s://)
- 使用用户名/密码进行身份验证
- 通常每个应用程序只需创建一次驱动程序实例
3. 定义 Cypher 查询
string queryString = @"
MATCH (r:Review)-[:WRITTEN_FOR]->(b:Book)<-[:AUTHORED]-(a:Author)
WHERE a.name = $name
RETURN b.title AS Title, r.text AS ReviewText, r.rating As Rating
ORDER BY r.rating DESC
LIMIT 20";Code language: C# (cs)
该查询:
- 查找与指定作者所著书籍相关的书评
- 使用参数 $name 进行动态过滤
- 使用与 BookReview 记录字段匹配的别名来返回数值
4. 使用 ExecutableQuery 执行查询
var bookReviews = await driverInstance
.ExecutableQuery(queryString)
.WithConfig(new QueryConfig(database: "goodreads"))
.WithParameters(new { name = "Stephen King" })
.ExecuteAsync()
.AsObjectsAsync<BookReview>();Code language: C# (cs)
步骤说明:
- ExecutableQuery 创建了一个查询构建器
- WithConfig 选择 goodreads 数据库
- WithParameters 安全地注入 $name 参数
- ExecuteAsync 执行 Cypher 查询
- AsObjectsAsync<BookReview>() 将每一行映射到您的领域记录中
5. 在应用程序中使用结果
bookReviews.ToList()
.ForEach(br => Console.WriteLine($"Title = {br.Title}"));Code language: JavaScript (javascript)
结果:
- 转换为列表
- 通过简单的 foreach 循环遍历
- 用于打印每个书评结果的标题
6. 定义领域模型
record BookReview(string Title, string ReviewText, int Rating);Code language: C# (cs)
此记录模型与 RETURN 子句中的别名相匹配,作为 Neo4j 返回的每一行的强类型表示。


