0

我可以让 CollectAs 函数返回IEnumerable<T>而不是返回IEnumerable<Node<T>>吗?我想将我的 POCO 类中的 Neo4j.Node 等数据库特定类排除在外。我必须使用命名类,因为与客户端一起使用,因为替代关系是可选的,并且使用泛型类会给我没有结果。另一种选择是创建一个像 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>()
   });
4

1 回答 1

1

Node<T>无论我们是否想要,Cypher 总是在表格中给出我们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中间类。

于 2013-04-03T20:17:02.027 回答