铸造未知类型的节点

2023-12-27

在使用 Neo4j 时,我能够创建带有标签的节点数组,然后在这些节点之间创建关系。这些标签本质上是到我的 POCO 的映射(Dog 标签与 C# 中的 Dog POCO 相关),并且这些 POCO 从仅包含 ID 属性的简单基本 POCO 实现。

当我知道要检索的节点的类型/标签时,我可以使用 return 语句中的 node.As 语法对其进行转换。但是,当执行诸如遍历节点之间的路径之类的操作时,我将不知道正在遍历的节点的类型。虽然从技术上讲可以将节点转换为我的 POCO 实现的基本类型,但我丢失了特定于超类的所有属性。

关于如何开始使用这个有什么想法吗?


您可以(取决于您的感受)尝试使用动态,例如,您可以像这样设置它:

var dog = new Dog {Name = "Woofer", Breed = "Afghan Hound"};
var owner = new Person {Name = "Jeff", PhoneNumber = "01234567890"};

//CREATE
gc.Cypher.
    Create("(owner:Person {ownerParams})")
    .WithParam("ownerParams", owner)
    .With("owner")
    .Create("(owner)-[:HAS_PET]->(dog:Dog {dogParams})")
    .WithParam("dogParams", dog)
    .ExecuteWithoutResults();

并检索:

//RETURN
var query = gc.Cypher
    .Match("(p:Person)-[:HAS_PET]->(d:Dog)")
    .Return((p, d) => new {Person = p.As<Node<string>>(), Dog = d.As<Node<string>>()});

var results = query.Results.ToList();
foreach (var result in results)
{
    dynamic p = JsonConvert.DeserializeObject<dynamic>(result.Person.Data);
    dynamic d = JsonConvert.DeserializeObject<dynamic>(result.Dog.Data);

    Console.WriteLine("If you find {0} (a {1}) please call {2} on {3}.", d.Name, d.Breed, p.Name, p.PhoneNumber);
}

显然在这种情况下我would知道我要返回的类型。现在,你会注意到我正在使用Node<string>在这个 - 哪个一般来说令人皱眉 - 我使用它的原因是它去掉了 Neo4j 返回的所有正常内容,并将Data出来——这才是我真正感兴趣的。

您可能会尝试这样做:

.Return((p,d) => new {Person = p.As<dynamic>(), Dog = d.As<dynamic>()});

但你最终会遇到的问题是 Neo4jClient 不处理动态并且实际上会将其作为object这会失去你所有的财产。

这至少应该为您提供一个起点,如果您需要特定类型查询的帮助,那么值得将查询提出来以供参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

铸造未知类型的节点 的相关文章

随机推荐

  • OpenCV 相机预览中未显示蒙版

    我想制作一个简单的 Android 应用程序 它在使用 OpenCV 检测到的面部上放置面具 如下例所示 人脸面具检测教程 http opencvexamples blogspot com 2013 11 putting mask on f
  • 如何导出Express中的所有路线?

    我有一个 NodeJS Express 应用程序 它在一个文件 app js 中变得非常大 我想将所有路线导出到一个外部文件中 例如 lib routes js 怎么做 如何导出以下代码并在 main 中正确要求它app js app ge
  • 如何配置 Spring bean 容器来加载 Java 属性文件?

    如何配置 Spring bean 容器 或应用程序上下文 来加载 Java 属性文件 Java世界 http www javaworld com 文章智能加载您的属性 http www javaworld com javaworld jav
  • 如何在c#应用程序设置中保存byte[]

    我正在尝试在 C 应用程序设置中保存由返回的字节数组 byte 对象列表视图 http objectlistview sourceforge net cs index html 谁能给我一个关于如何在 C 应用程序设置中保存字节数组的解决方
  • 从苹果网站下载源代码

    如何从 Apple 网站 http opensource apple com source 下载源代码 我特别感兴趣的是http opensource apple com source Security Security 55110 htt
  • 有没有办法在 Google 容器优化操作系统上指定 docker 日志的文件大小限制?

    我在 Google 的容器优化操作系统 COS 上运行了一个非常长时间 且冗长 的容器作业 最终生成了足够的日志来填充磁盘 据我所知 在使用 COS 时没有办法轮换 限制日志文件大小 检查正在运行的容器 它似乎将一个不断增长的文件写入 va
  • Spark 中的分组和标准化

    我有以下数据框 import pandas as pd import numpy as np df pd DataFrame 1 2 3 1 2 1 1 2 2 2 2 2 2 3 2 2 4 2 columns a b c df df s
  • 将本地 HTML 加载到 WebView 中

    我可以将本地 HTML 文件 带有图像和 加载到WebView 只需设置Source参数并不能解决问题 您可以从文件加载它 只要该文件是应用程序包的一部分 例如 WebView2 Source new Uri ms appx web ass
  • 即使在 pip 安装后也无法将 geopy 导入 Jupyter

    我正在尝试安装 geopy 以在 Jupyter 中使用 但当我尝试导入它时 我不断收到以下错误 import geopy ModuleNotFoundErrorTraceback most recent call last
  • android.permission.WRITE_MEDIA_STORAGE 错误

    我正在开发一个编辑文本文件的应用程序 当通过 ACTION OPEN DOCUMENT 活动打开文件时 我能够读 写文件 Intent intent new Intent Intent ACTION OPEN DOCUMENT intent
  • Google OAuth2 通过 cURL (PHP) 返回“unsupported_grant_type”

    我想获取有关谷歌帐户的数据 我使用下一个代码 curl curl init curl setopt array curl array CURLOPT URL gt https www googleapis com oauth2 v4 tok
  • Ext.onReady() 与 $(document).ready()

    有什么不同 我有 document ready 函数 它应该检查 extjs 是否已加载 但主要问题是 extjs 没有按时加载 并且 document ready 内部的内容开始执行 extjs 创建函数会产生主要错误 无法在 Ext c
  • 删除已删除远程的远程跟踪分支

    如果我从我的存储库中删除一个遥控器 假设我删除了该遥控器origin 有没有一种快速方法可以删除该遥控器的所有远程跟踪分支 我知道git branch dr 但据我所知 我必须为每个跟踪分支执行一次此操作 还有git remote prun
  • 当suppressMarkers设置为true时,Google地图路线拖动变得不稳定

    我有一个谷歌地图 我可以在源路线和目的地路线之间添加多个点 停靠点 航点 创建路线 google maps DirectionsService 并放置在地图上 google maps DirectionsRenderer 后 您可以拖动路线
  • 将子域从 Route53 指向 CloudFront,而不使用 CNAME

    我有一个子域 dev example com 我需要将其指向我的 cloudfront 发行版 xyz cloudfront net 我做了以下步骤 1 创建了cloudfront发行版 创建云前端分发时 未在 Cname 字段中指定任何内
  • 无法使 Laravel 4 在本地主机上运行

    在阅读 Laravel4 beta 发布的公告后 我第一次尝试 Laravel 我跟着这些步骤 http four laravel com 我安装了 Composer 和 Laravel 及其所需的所有依赖项 我把 laravel 放进去
  • Maven 的 versions:display-dependency-updates 的 Ivy 等价物是什么?

    我有一个 ivy xml 文件 在其中明确指定我的依赖项 Ivy 中是否内置了任何功能 可以让我发现或自动更新过时的依赖项 我不想使用latest release 因为我想要一个完全稳定且可重现的构建 但每隔一段时间我就会想要更新一些依赖项
  • 现在,Arc Welder 无法在 Windows 上启动测试应用程序

    昨天 2015 年 10 月 19 日下午 06 00 ARC Welder 应用程序开始无法启动应用程序 由于某种原因 现在 当我单击 测试 时 Windows 10 上没有任何反应 我也在 MAC Windows 7 上进行了测试 并且
  • 执行 static_assert 模板类型是另一个模板

    我如何static assert像这样 如果 Boost 不支持 C 或 C 11 中的新功能 也许 Boost 支持它 template
  • 铸造未知类型的节点

    在使用 Neo4j 时 我能够创建带有标签的节点数组 然后在这些节点之间创建关系 这些标签本质上是到我的 POCO 的映射 Dog 标签与 C 中的 Dog POCO 相关 并且这些 POCO 从仅包含 ID 属性的简单基本 POCO 实现