在RavenDB中查询动态属性

时间:2012-10-31 13:18:13

标签: c# ravendb

我在Raven中查询动态属性时遇到了一些麻烦。

以下是我的课程:

    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'或'Key'索引。在我的例子中,子节点不能从接口继承,因为真正的子类看起来完全不同。这些类是为与场景匹配的测试而构建的。

我到目前为止构建的索引如下所示:

    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 个答案:

答案 0 :(得分:1)

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

应该工作