0

IEnumerable<T>ではなく、CollectAs 関数を返すことはできますIEnumerable<Node<T>>か? POCO クラスから Neo4j.Node のようなデータベース固有のクラスを除外したいと思います。代替関係はオプションであり、ジェネリック クラスを使用すると noresult が返されるため、クライアントでは名前付きクラスを使用する必要があります。もう 1 つの方法は、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

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中間クラスを作成する必要がなくなります。

于 2013-04-03T20:17:02.027 に答える