c# - 在 neo4jclient 中从收集中选择第一项的密码查询
问题描述
我有以下代码,但我不知道如何在 C# 中使用 graphclient。让我感到困惑的是 RETURN 节点[0]。
它所做的是它将返回具有不同名称值的所有节点及其属性。
PROFILE MATCH (t:Node { Mapped: true})
WITH t.name as t, collect(t) AS nodes
RETURN nodes[0]
当前的实现要求我获取所有内容,然后使用 LINQ 来获取不同的内容,但这比较慢:
var res = graphClient.Cypher
.Match(match)
.Return(t => new
{
N = Return.As<string>("t.name")
LA = Return.As<double>("t.lat"),
LO = Return.As<double>("t.lon")
})
.OrderBy("t.name")
.Results;
//TODO: THE DISTINT NEEDS TO BE IN THE QUERY INSTEAD OF AFTER RESULT.
return res.Where(p => p.N != null).GroupBy(p => p.N).Select(grp => grp.FirstOrDefault());
解决方案
您可能需要一个正确的结果类,而不是为此尝试匿名类型,所以如果您有这个:
public class Location{
[JsonProperty("name")]
public string Name {get;set;}
[JsonProperty("lat")]
public double Lat { get; set; }
[JsonProperty("lon")]
public double Lon { get; set; }
}
然后,您可以将查询编写为:
var query = client.Cypher
.Match("(t:Node {Mapped: true})")
.With("t.name AS t, collect(t) AS nodes")
.Return(() => Return.As<Location>("nodes[0]"));
如果你看一下:
query.Query.DebugQueryText
你应该看到:
MATCH (t:Node {Mapped: true})
WITH collect(t) AS nodes
RETURN nodes[0]
推荐阅读
- asp.net - 确保 .NET 中的唯一会话变量
- hyperledger-composer - 没有 npm 注册表的 Hyperledger Composer
- webpack - 配置 Webpack 以解析相对路径
- bash - 使用 shell 脚本提取 .ppt 文件中的幻灯片数量
- node.js - express: 安装 express-generator@4 后找不到命令
- reactjs - 如何在返回的对象中直接从动作中提取有效负载
- android - Android 忽略完成()
- typescript - vscode 忽略 [ts] 找不到模块
- java - 主要活动没有正确引用外部 java 类
- excel - 从下拉列表中选择后出现意外的 Selenium 行为