开发者中心 » 编程语言 » C# » 代码指南 » C# 查询代码示例

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 返回的每一行的强类型表示。

分享文章