Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有多个值的Neo4jClient Cypher查询收集语句_C#_Neo4j_Neo4jclient - Fatal编程技术网

C# 具有多个值的Neo4jClient Cypher查询收集语句

C# 具有多个值的Neo4jClient Cypher查询收集语句,c#,neo4j,neo4jclient,C#,Neo4j,Neo4jclient,我正在尝试将一个来自cypher的查询转换为在c中使用neo4jclient api# 这是我的密码 start server=node:node_auto_index(serverId='SHO2K3MS49') MATCH server-[:IS_SERVER_TYPE]->type, appEnv-[:HAS_SERVER]->server, app-[:HAS_ENV]->appEnv return server.serverId,

我正在尝试将一个来自cypher的查询转换为在c中使用neo4jclient api#

这是我的密码

start server=node:node_auto_index(serverId='SHO2K3MS49')
MATCH 
 server-[:IS_SERVER_TYPE]->type,
 appEnv-[:HAS_SERVER]->server,
 app-[:HAS_ENV]->appEnv
return        
   server.serverId,
   collect([
   appEnv.environmentTypeId,
   appEnv.appEnvId,
   app.appId,
   app.appName
  ]) ;
该查询为每台服务器返回一行,并收集该服务器上的所有应用程序

就我所见,.CollectAs api只允许单个值

如何使用.NETAPI实现这一点

编辑

我刚刚试过这个问题

_connectedClient
 .Cypher                 
 .Start(new {server = Node.ByIndexLookup("node_auto_index", "serverId", "SHO2K3MS49") })
 .Match("server-[:IS_SERVER_TYPE]->type", "appEnv-[:HAS_SERVER]->server", "app-[:HAS_ENV]->appEnv")               
 .Return((server, appEnv, app) => 
  new
   {
       ServerName = Return.As<string>("server.serverId"),     
       aa = Return.As<dynamic>    ("collect([appEnv.environmentTypeId,appEnv.appEnvId,app.appId,app.appName])")                                                                                                                          
   })
 .Results;
消息——为简洁起见,删除了样板文本

Neo4jClient encountered an exception while deserializing the response from the server. This is likely a bug in Neo4jClient.

Include the full type definition of <>f__AnonymousType1`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].

Include this raw JSON, with any sensitive values replaced with non-sensitive equivalents:

{"columns":["ServerName","aa"],"data":[["SHO2K3MS49",[["PRD","MATT.PRD","MATT","MATT"],["PRD","ARCSERV.PRD","ARCSERV","ArcServ"],["PRD","ACTIVE DIRECTORY _WINDOWS SERVER NETWORKING_.PRD","ACTIVE DIRECTORY _WINDOWS SERVER NETWORKING_","Active Directory (Windows Server networking)"]]]]}
Parameter name: content
Neo4jClient在反序列化服务器响应时遇到异常。这可能是Neo4jClient中的一个bug。
包括f_uuAnonymousType1`2的完整类型定义[[System.String,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089],[System.Object,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]。
包括此原始JSON,任何敏感值都替换为非敏感等效值:
{“列”:[“服务器名”、“aa”]、“数据”:[“SHO2K3MS49”[“PRD”、“MATT.PRD”、“MATT”、“MATT”]、[“PRD”、“ARCSERV.PRD”、“ARCSERV”、“ARCSERV”]、[“PRD”、“ACTIVE DIRECTORY\u WINDOWS SERVER NETWORKING\u.PRD”、“ACTIVE DIRECTORY\u WINDOWS SERVER NETWORKING\u”、“ACTIVE DIRECTORY(WINDOWS SERVER NETWORKING)”]]
参数名称:内容

这是因为从
collect
语句返回的结果基本上是没有定义列的字符串。JSON.NET无法推断列是什么(并且您不能使用
AS
来帮助它),因此您只能得到如下字符串:

"[\r\n"EnvType1",\r\n"AppEnvId1",\r\n"App2",\r\n"App 2"\r\n]"
您可以使用以下查询获得:

_connectedClient
    .Cypher                 
    .Start(new {server = Node.ByIndexLookup("node_auto_index", "serverId", "SHO2K3MS49") })
    .Match("server-[:IS_SERVER_TYPE]->type", "appEnv-[:HAS_SERVER]->server", "app-[:HAS_ENV]->appEnv")               
     .Return((server, appEnv, app) => 
      new
       {
           ServerName = Return.As<string>("server.serverId"),     
           aa = Return.As<IEnumerable<string>>("collect([appEnv.environmentTypeId,appEnv.appEnvId,app.appId,app.appName])")                                                                                                                          
       })
     .Results;
我认为这会以您想要的方式为您提供结果,我想这里的问题是,在服务器上执行
收集
,还是在客户端执行
GroupBy

"[\r\n"EnvType1",\r\n"AppEnvId1",\r\n"App2",\r\n"App 2"\r\n]"
_connectedClient
    .Cypher                 
    .Start(new {server = Node.ByIndexLookup("node_auto_index", "serverId", "SHO2K3MS49") })
    .Match("server-[:IS_SERVER_TYPE]->type", "appEnv-[:HAS_SERVER]->server", "app-[:HAS_ENV]->appEnv")               
     .Return((server, appEnv, app) => 
      new
       {
           ServerName = Return.As<string>("server.serverId"),     
           aa = Return.As<IEnumerable<string>>("collect([appEnv.environmentTypeId,appEnv.appEnvId,app.appId,app.appName])")                                                                                                                          
       })
     .Results;
var query2 = GraphClient
    .Cypher
    .Start(new { server = new NodeReference(1) })
    .Match("server-[:IS_SERVER_TYPE]->type", "appEnv-[:HAS_SERVER]->server", "app-[:HAS_ENV]->appEnv")
    .Return((server, appEnv, app) =>
        new
        {
            ServerId = Return.As<string>("server.ServerId"),
            EnvironmentTypeId = Return.As<string>("appEnv.EnvironmentTypeId"),
            AppEnvId = Return.As<string>("appEnv.AppEnvId"),
            AppId = Return.As<string>("app.AppId"),
            AppName = Return.As<string>("app.AppName"),
        });

var results2 = query2.Results.GroupBy(g => g.ServerId).ToList();