Neo4j查询在第一次之后返回多条记录

Neo4j查询在第一次之后返回多条记录,neo4j,cypher,neo4jclient,Neo4j,Cypher,Neo4jclient,我将Neo4j客户端与ASP.NET MVC一起使用,我有一个查询,它显示在一个日期范围内的用户事件,当我第一次运行此查询时,它会正确返回事件,但当我调用ajax再次运行事件时,查询给我的记录是第一次的两倍。我已经逐行跟踪了查询,但一切似乎都很正常,我不得不说我第一次使用了Union,可以查看我的查询并告诉我是否有问题吗 var q = new CypherFluentQuery(client) as ICypherFluentQuery; q = q.Match("(y:Year)--(m:M

我将Neo4j客户端与ASP.NET MVC一起使用,我有一个查询,它显示在一个日期范围内的用户事件,当我第一次运行此查询时,它会正确返回事件,但当我调用ajax再次运行事件时,查询给我的记录是第一次的两倍。我已经逐行跟踪了查询,但一切似乎都很正常,我不得不说我第一次使用了
Union
,可以查看我的查询并告诉我是否有问题吗

var q = new CypherFluentQuery(client) as ICypherFluentQuery;
q = q.Match("(y:Year)--(m:Month)--(d:Day)--(h:Hour)--(sr:ServiceRequest)-[" + Relations.EXPERT_ASSIGN_TO_SQ.ToString() + "]-(u:User)")
     .Where("y.value >= {param}").WithParam("param", dt1.Year)
     .AndWhere("m.value >= {param2}").WithParam("param2", dt1.Month)
     .AndWhere("d.value >= {param4}").WithParam("param4", dt1.Day)
     .AndWhere("u.Id = {param10}").WithParam("param10", Id)
     .With("y,m,d,h,sr,u")
     .Match("(sr)-[:" + Relations.SC_HAS_SQ.ToString() + "]-(c2:ServiceCategory)-[:" + Relations.SC_IS_SC_CHILD.ToString() + "*]-(c3:ServiceCategory)")
     .ReturnDistinct((y, m, d, h, sr, c2, c3) => new
     {
         Year = y.As<RootTree>().value,
         Month = m.As<RootTree>().value,
         Day = d.As<RootTree>().value,
         Hour = h.As<RootTree>().value,
         serviceRequest = sr.As<ServiceRequest>(),
         ServiceCategory = c2.As<OnDemandService>(),
         ServiceParent = c3.As<OnDemandService>()

     })
     .UnionAll()
     .Match("(yy:Year)--(mm:Month)--(dd:Day)--(hh:Hour)--(sr2:ServiceRequest)-[" + Relations.EXPERT_ASSIGN_TO_SQ.ToString() + "]-(u)")
     .Where("yy.value <= {param7}").WithParam("param7", dt2.Year)
     .AndWhere("mm.value >= {param8}").WithParam("param8", dt2.Month)
     .AndWhere("dd.value >= {param9}").WithParam("param9", dt2.Day)
     .With("yy,mm,dd,hh,sr2,u")
     .Match("(sr2)-[:" + Relations.SC_HAS_SQ.ToString() + "]-(c2:ServiceCategory)-[:" + Relations.SC_IS_SC_CHILD.ToString() + "*]-(c3:ServiceCategory)");

var query = q.ReturnDistinct((yy, mm, dd, hh, sr2, c2, c3) => new
{
    Year = yy.As<RootTree>().value,
    Month = mm.As<RootTree>().value,
    Day = dd.As<RootTree>().value,
    Hour = hh.As<RootTree>().value,
    serviceRequest = sr2.As<ServiceRequest>(),
    ServiceCategory = c2.As<OnDemandService>(),
    ServiceParent = c3.As<OnDemandService>()
}).Results.ToList();
var q=新的CypherFluentQuery(客户端)作为ICypherFluentQuery;
q=q.Match(“(y:Year)-(m:Month)-(d:Day)-(h:Hour)-(sr:ServiceRequest)-[“+关系.EXPERT\u分配给\u SQ.ToString()+”]-(u:User)”)
.Where(“y.value>={param}”).WithParam(“param”,dt1.Year)
.AndWhere(“m.value>={param2}”).WithParam(“param2”,dt1.Month)
.AndWhere(“d.value>={param4}”).WithParam(“param4”,dt1.Day)
.AndWhere(“u.Id={param10}”).WithParam(“param10”,Id)
带(“y、m、d、h、sr、u”)
.Match(“(sr)-[:”+关系.SC_具有_SQ.ToString()+”]-(c2:serviceCegory)-[:“+关系.SC_是_SC_CHILD.ToString()+”*]-(c3:serviceCegory)”)
.ReturnDistinct((y、m、d、h、sr、c2、c3)=>新
{
年份=y.As().值,
月份=m.As().值,
日期=d.As().值,
小时=h.As().值,
serviceRequest=sr.As(),
ServiceCategory=c2.As(),
ServiceParent=c3.As()
})
.UnionAll()
.Match(“((yy:Year)-(mm:Month)-(dd:Day)-(hh:Hour)-(sr2:ServiceRequest)-[“+关系.EXPERT\u分配给\u SQ.ToString()+”]-(u)”)
.Where(“yy.value={param8}”).WithParam(“param8”,dt2.Month)
.AndWhere(“dd.value>={param9}”).WithParam(“param9”,dt2.Day)
.随附(“年、月、日、小时、sr2、u”)
.Match(“(sr2)-[:”+关系.SC_有_SQ.ToString()+”]-(c2:ServiceCategory)-[:“+关系.SC_是_SC_CHILD.ToString()+”*]-(c3:ServiceCategory)”;
var query=q.ReturnDistinct((年、月、日、小时、sr2、c2、c3)=>新
{
年份=yy.As().值,
月份=mm.As()值,
日=日作为()值,
小时=hh.As().值,
serviceRequest=sr2.As(),
ServiceCategory=c2.As(),
ServiceParent=c3.As()
}).Results.ToList();
跟踪查询:

MATCH (y:Year)--(m:Month)--(d:Day)--(h:Hour)--(sr:ServiceRequest)-[EXPERT_ASSIGN_TO_SQ]-(u:User)
WHERE y.value >= 2017
AND m.value >= 5
AND d.value >= 16
AND u.Id = "c0dc7cbe-5626-4012-a5ea-72c1cfce2461"
WITH y,m,d,h,sr,u
MATCH (sr)-[:SC_HAS_SQ]-(c2:ServiceCategory)-[:SC_IS_SC_CHILD*]-(c3:ServiceCategory)
RETURN distinct y.value AS Year, m.value AS Month, d.value AS Day, h.value AS Hour, sr AS serviceRequest, c2 AS ServiceCategory, c3 AS ServiceParent
UNION ALL
MATCH (yy:Year)--(mm:Month)--(dd:Day)--(hh:Hour)--(sr2:ServiceRequest)-[EXPERT_ASSIGN_TO_SQ]-(u)
WHERE yy.value <= 2017
AND mm.value >= 5
AND dd.value >= 9
WITH yy,mm,dd,hh,sr2,u
MATCH (sr2)-[:SC_HAS_SQ]-(c2:ServiceCategory)-[:SC_IS_SC_CHILD*]-(c3:ServiceCategory)
RETURN distinct yy.value AS Year, mm.value AS Month, dd.value AS Day, hh.value AS Hour, sr2 AS serviceRequest, c2 AS ServiceCategory, c3 AS ServiceParent
MATCH(y:Year)-(m:Month)-(d:Day)-(h:Hour)-(sr:ServiceRequest)-(EXPERT\u-ASSIGN\u-TO\u-SQ)-(u:User)
其中y.value>=2017
和m.value>=5
和d.值>=16
和u.Id=“c0dc7cbe-5626-4012-a5ea-72c1cfce2461”
有y,m,d,h,sr,u
匹配(sr)-[:SC_HAS_SQ]-(c2:ServiceCategory)-[:SC_IS_SC_CHILD*]-(c3:ServiceCategory)
返回不同的y.值作为年,m.值作为月,d.值作为日,h.值作为小时,sr作为serviceRequest,c2作为ServiceCategory,c3作为ServiceParent
联合所有
匹配(yy:Year)-(mm:Month)-(dd:Day)-(hh:Hour)-(sr2:ServiceRequest)-(专家分配给SQ)-(u)
其中yy.value=5
和dd.value>=9
年、月、日、小时、sr2、u
匹配(sr2)-[:SC_HAS_SQ]-(c2:ServiceCategory)-[:SC_IS_SC_CHILD*]-(c3:ServiceCategory)
返回不同的yy.value作为年,mm.value作为月,dd.value作为日,hh.value作为小时,sr2作为serviceRequest,c2作为ServiceCategory,c3作为ServiceParent
更新


我已经在neo4j本身上运行了多次查询,它返回的结果是正确的,只有在使用neo4jClient在我的应用程序中运行查询时才会发生这种情况,实际上这很简单,因为我使用了
union all
我将其更改为
union
,并且成功了

如果你连续两次在控制台应用程序中调用该代码,那么第二次调用是否也会返回多个条目?@ChrisSkardon yes。。第一次它正确返回,但第二次它为每个记录返回重复的记录,即使如此,我还是返回为distinct@ChrisSkardon我发现了这个问题,是因为
UNION-ALL
我把它改成了
UNION
并开始工作。