我可以返回IEnumerable <t>而不是IEnumerable <node <t>&gt;使用Neo4J .net客户端中的CollectAs </node <t> </t>

时间:2013-04-03 15:52:27

标签: neo4jclient

我可以让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>()
   });

1 个答案:

答案 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中介类。