我可以让CollectAs函数返回IEnumerable<T>
而不是IEnumerable<Node<T>>
吗?我想从我的POCO类中保留像Neo4j.Node这样的数据库特定类。我必须使用一个命名类,因为替代关系是可选的,使用泛型类会给我noresults。另一种选择是让我创建一个像AppDetailWithNodes这样的中间类,然后将其转换为POCO类,但是为此增加一个类看起来似乎有点苦差事。
var query = client.Cypher.StartWithNodeIndexLookup("root", AUTOINDEX, PrimaryIndexKey, appSlug)
.Match("root <-[?:Alternative]-Alternatives")
.Return((root, Alternatives) => new AppDetail()
{
App = root.As<App>(),
Alternatives = Alternatives.CollectAs<App>()
});
答案 0 :(得分:1)
Cypher总是在表格中提供Node<T>
我们是否只需要T
。
我们在Neo4jClient中有一些聪明的东西可以让你使用Return<T>
代替Return<Node<T>>
,然后我们会把这些信息丢给你。我们仍然通过电线返回它。
这些智能尚未针对CollectAs
实施。
目前,您只需要在.NET中进行投影:
var query = client
.Cypher
.StartWithNodeIndexLookup("root", AUTOINDEX, PrimaryIndexKey, appSlug)
.Match("root <-[?:Alternative]-alternative")
.Return((root, alternative) => new
{
App = root.As<App>(),
Alternatives = alternative.CollectAs<App>()
})
.Results
.Select(result => new AppDetail()
{
App = result.App,
Alternatives = result.Alternatives.Select(a => a.Data).ToArray()
});
使用Return
调用的匿名类型将使您不必创建AppDetailWithNodes
中介类。