在使用的Neo4j我能够创建一个标签节点的数组,然后创建这些节点之间的关系。 标签基本上是映射到我波苏斯(狗标签涉及一种狗POCO在C#),并且这些从波苏斯仅含有一个ID属性的简单碱POCO实现。
当我知道要检索的节点的类型/标签,我可以在使用return语句中的node.As <T>语法来施放它。 但是,这样做的事情,例如移动节点之间的路径时,我不知道,我遍历节点的类型。 虽然技术上可以投的节点,我的波苏斯从实现的基类,我失去了所有特定于超类中的属性。
如何任何想法开始使用这一个?
在使用的Neo4j我能够创建一个标签节点的数组,然后创建这些节点之间的关系。 标签基本上是映射到我波苏斯(狗标签涉及一种狗POCO在C#),并且这些从波苏斯仅含有一个ID属性的简单碱POCO实现。
当我知道要检索的节点的类型/标签,我可以在使用return语句中的node.As <T>语法来施放它。 但是,这样做的事情,例如移动节点之间的路径时,我不知道,我遍历节点的类型。 虽然技术上可以投的节点,我的波苏斯从实现的基类,我失去了所有特定于超类中的属性。
如何任何想法开始使用这一个?
你可以(取决于你如何看待它),尝试使用动态的,例如,您可以设置它就像这样:
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);
}
显然,在这种情况下,我就知道我是返回类型。 现在,你会发现我使用的Node<string>
在这一点- 通常是令人难以接受的-我使用它的原因是,它剔除了所有的正常的东西Neo4j的返回,并分离Data
出来-这真的是所有我感兴趣的东西。
你可能会尝试这样做:
.Return((p,d) => new {Person = p.As<dynamic>(), Dog = d.As<dynamic>()});
但你会在这里结束的问题是,Neo4jClient不处理动态,并实际上将返回它作为一个object
,其失去了所有的属性。
这至少应该给你一个起点,如果你需要使用特定类型的查询,帮助它会是值得投入,以供参考查询了。