2012-05-03 81 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"); 

如何操縱上面的變量「查詢」以獲得一個只是TheaterNames的列表..現在上面的代碼讓我在變量「查詢」中的整個文檔..我需要能夠解析出嵌套對象中的「影院名稱」並填充到列表中..感謝您的任何幫助。

我想是這樣..

query.ElementAt(1)..但沒得到我的任何地方。

回答

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只給我選項..編號,城市和劇院.. – ZVenue

+0

如果您使用AbstractIndexCreationTask 定義您的索引,那很正常。不要在AbstractIndexCreationTask泛型定義中指定Reduced Result。如Daniel所說,只使用AbstractIndexCreationTask ,您將在Store()上獲得x.Name。 –

+0

是的,我只做AbstractIndexCreationTask ..它不給我的x.name – ZVenue