2012-10-31 95 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 }" 
      }; 
     } 
    } 

該指數除了工作,我似乎無法過濾掉誰匹配一個類型,而不是其他的孩子。序列化的JSON for Child包含一個名爲'$ 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?這就是我原本想要放置我的濾波器的地方,但我似乎無法使其工作。 –