2017-01-26 4 views
1

こんにちは、私はravendbインデックスにいくつかの問題があります。ravendbインデックスの問題

私がしたいことをコードで説明しましょう。

私はこれらの2つのクラスがあります:彼らはそれぞれがravendbでのドキュメントの種類を表す

class John 
{ 
    public string Name { get; set; } 
    public IList<int> Cats { get; set; } 
} 

class John2 
{ 
    public string Name { get; set; } 
    public int Cat { get; set; } 
} 

を。

インデックスを作成します。このインデックスは、John型のオブジェクトのCatsリストにエントリがあるのと同じくらい多くのJohn2のオブジェクトを与えます。

ので、私はこれを持って言うことができます:

var john = new John 
{ 
    Name = "test", 
    Cats = new List<int> { 12,13} 
}; 

その後、私は次の操作を実行するためのインデックスをしたい:

var res = john.Cats.Select(x => new John2 {Name = "john", Cat = x}); 

変数RESはその後、自分のしてタイプJohn2の2つのエントリそれぞれが含まれていますネコ。 John2エントリの数は、オブジェクトJohnのCatsリストのCatsの数によって異なります。

まず最初に、私はravendbとインデックスを完全に新しくしました。だから私はこのようなことが可能かどうか知りません。

ravenインデックスを使用して上記の機能を達成する方法に関する提案はありますか?

答えて

2

データを投影する場合は、Transformersを使用できます。

public class John2Transformer : AbstractTransformerCreationTask<John> 
{ 
     public John2Transformer() 
     { 
      TransformResults = johns => from john in johns 
             from cat in john.Cats 
             select new 
             { 
              Name = john.Name, 
              Cat = cat 
             }; 
     } 
} 

問合せ:あなたは、サーバー上にあなたの変圧器をインストールする必要があります

IList<John2> res = session.Query<John>() 
     .TransformWith<John2Transformer, John2>() 
     .ToList(); 
+1

注意。例えば、あなたのアプリケーションのスタートアップコードの中に、 'new John2Transformer()。Execute(docStore);' –

+1

のようなコードを追加したいと思います。 @judahはい私は、感謝の情報を感謝:) – Diemauerdk

関連する問題