如何使用C# Neo4jClient查询节点关联关系类型并返回统计与类型列表
代码调整方案
修正后完整实现代码
如果需要复用返回结构,可先定义对应的结果类:
public class RelationStatResult { public long RelCount { get; set; } public List<string> Types { get; set; } } // 查询执行逻辑 var queryResults = client.Cypher .Match(@"()-[relations]-(p)") .Where("p.name = $targetName") .WithParam("targetName", "example") .Return(() => new RelationStatResult { RelCount = relations.Count(), // 显式调用Cypher的type()函数获取关系类型后再收集 Types = Return.As<List<string>>("collect(type(relations))") }) .Limit(10) .Results .ToList();
如果不需要复用返回结构,可直接使用匿名类型,和你原有写法兼容:
var queryResults = client.Cypher .Match(@"()-[relations]-(p)") .Where("p.name = $targetName") .WithParam("targetName", "example") .Return(() => new { RelCount = relations.Count(), Types = Return.As<List<string>>("collect(type(relations))") }) .Limit(10) .Results .ToList();
核心修改说明
- 原代码中
relations.CollectAs<List<string>>()是直接收集完整的关系对象,和你需要的type(relations)的结果不匹配,这里通过Return.As显式指定执行Cypher的collect(type(relations))逻辑,直接得到关系类型的字符串集合 - 新增参数化查询替换硬编码的条件值,避免Cypher注入风险,同时适配多场景复用
- 执行后得到的
queryResults就是符合你要求结构的集合,序列化后和你期望的JSON输出完全一致
内容的提问来源于stack exchange,提问作者StuckOverflow
相关产品推荐
相关产品推荐

