2012-10-31 4 views
3

Raven에서 동적 속성을 쿼리하는 데 문제가 있습니다. 여기 RavenDB의 동적 속성 쿼리

내 클래스입니다 :

public class Parent 
    { 
     public string ID { get; set; } 
     public dynamic Child { get; set; } 
    } 

    public class Son 
    { 
     public int A { get; set; } 
     public Guid Key { get; set; } 
    } 

    public class Daughter 
    { 
     public int A { get; set; } 
     public Guid Key { get; set; } 
    } 

난 할 노력하고있어 그 아이 자식 속성 'A'또는 '키'에 의해 아들이 아닌 딸, 그리고 인덱스 인덱스 부모입니다 . 필자의 경우, 실제 자식 클래스는 완전히 다르게 보일 것이기 때문에 자식은 인터페이스를 상속받을 수 없습니다. 이러한 클래스는 시나리오와 일치하는 테스트 용으로 작성됩니다.

내가 구축 한 인덱스는 지금까지 다음과 같습니다 : 나는 한 가지 유형의 다른되지 일치하는 아이를 필터링 할 수없는 것을 제외하고

public class DynamicIndex : AbstractIndexCreationTask 
    { 
     public override Raven.Abstractions.Indexing.IndexDefinition CreateIndexDefinition() 
     { 
      return new IndexDefinition() 
      { 
       Map = @"from doc in docs.Parent select new { A = doc.Dynamic.A, B = doc.Dynamic.B }" 
      }; 
     } 
    } 

이 지수가 작동합니다. Child 용 직렬화 된 JSON에는 Type의 전체 이름 인 '$ type'이라는 속성이 있습니다. 내 본능은 이것을 사용하여 아동 유형을 구별하지만, 어떻게 접근해야할지 모르겠다.

'$ test'속성을 포함하도록 색인의지도를 확장하거나 특정 유형과 일치하는 하위 항목을 필터링하는 다른 방법은 무엇입니까?

답변

1
Map = @"from doc in docs.Parent select new { A = doc.Dynamic.A, B = doc.Dynamic.B, Type = doc.Dynamic[""$type""] }" 

+0

감사를 작동합니다! 내가 찾던 대답은 아니지만 상상했던 것보다 효과적입니다. where 절에서 $ type에 액세스 할 수 있습니까? 그것이 원래 필자의 타입 필터를 넣으려고 생각했던 곳이지만, 제대로 작동하지 않는 것 같습니다. –