使用 select 第一项从 neo4jclient 中收集的 Cypher 查询
Cypher query with select first item from collect in neo4jclient
我有以下代码,但我不知道如何使用 graphclient 在 C# 中执行它。令我困惑的是 RETURN 个节点[0]。
它的作用是 return 所有节点及其属性具有不同的名称值。
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());
你可能想要一个正确的结果 class 而不是为此尝试匿名类型,所以如果你有这个:
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]
我有以下代码,但我不知道如何使用 graphclient 在 C# 中执行它。令我困惑的是 RETURN 个节点[0]。
它的作用是 return 所有节点及其属性具有不同的名称值。
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());
你可能想要一个正确的结果 class 而不是为此尝试匿名类型,所以如果你有这个:
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]