2012-05-03 10 views
0

RavenDBを使用してMVCアプリケーションのすべての劇場名のリストを取得しようとしています。だから、ネストされたオブジェクトから劇場名のリストを保持しようとしていますravendbドキュメント...リスト内でネストされたプロパティを取得する - インデックスを使用する

サンプルRavenDBドキュメント:

{ 
    "City": "NY", 

    "Theaters": [ 
     { 
      "TheaterName": "TheaterA", 
      "TheaterId": "Theater/1693", 
      "Description": ""    
     }, 
     { 
      "TheaterName": "TheaterB", 
      "TheaterId": "Theater/16393", 
      "Description": ""    
     } 
    ] 
} 

指数(GetCityTheatersIndex):

docs.CityTheaters 
    .Select(doc => new {Theaters = doc.Theaters, City= doc.City}) 

コード:

var query = 

session.Advanced.LuceneQuery<CityTheaters>("CityTheaters/GetCityTheatersIndex"); 

上記の変数 "query"を操作するにはどうすればよいのですか?TheatreNameのリストを取得するにはどうすればいいですか?ネストされたオブジェクトの "劇場の名前"とリストに移る..任意のヘルプありがとう。

私はquery.ElementAt(1)

...のようなものを試してみました..しかしそれdidntのはどこにでも私を取得します。

答えて

3

あなたはそれを行うには、フィールドのストレージをマップインデックスを使用することができます。

public class CityTheaters : AbstractIndexCreationTask<City> 
{ 
    public class Result 
    { 
     public string Name { get; set; } 
    } 

    public CityTheaters() 
    { 
     Map = cities => from city in cities 
         from theater in city.Theaters 
         select new 
         { 
          theater.Name 
         }; 

     Store(x => x.Name, FieldStorage.Yes); 
    } 
} 

その後、あなたは次のように問い合わせることができます:

var results = session.Query<City, CityTheaters>() 
    .AsProjection<CityTheaters.Result>() 
    .ToList(); 
+0

私は店でx.Name(Xを取得することはできません= > x.Name ...)最後のコード行... intellisenseは私に唯一のオプションを与えます.. id、CityおよびTheaters .. – ZVenue

+0

AbstractIndexCreationTask でインデックスを定義すると、それは正常です。 AbstractIndexCreationTaskジェネリック定義に縮小結果を指定しないでください。ダニエルが言ったようにAbstractIndexCreationTask だけを使用し、Store()でx.Nameを取得します。 –

+0

はい、私はAbstractIndexCreationTask だけをやっています。私にx.nameを与えていない – ZVenue

関連する問題