2012-05-03 3 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"를 어떻게 조작 할 수 있습니까? 위의 코드는 전체 문서를 변수 "query"로 가져옵니다. 구문 분석 할 수 있어야합니다. 중첩 된 객체의 "극장 이름"과 목록에 채우기 .. 어떤 도움을 주셔서 감사합니다.

나는 .. 같은

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 일반 정의에 축소 결과를 지정하지 마십시오. Daniel이 말한대로 AbstractIndexCreationTask 만 사용하면 Store()에 x.Name이 표시됩니다. –

+0

예, AbstractIndexCreationTask 만을하고 있습니다 .. 그에게 x.name을주지 않음 – ZVenue

관련 문제