3

我在 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 }"
            };
        }
    }

该索引有效,但我似乎无法过滤掉匹配一种类型而不匹配另一种类型的孩子。Child 的序列化 JSON 包含一个名为“$type”的属性,它是该类型的全名。我的直觉告诉我用它来区分儿童类型,但我不知道如何访问它。

如何扩展我的索引映射以包含“$test”属性,或者是否有另一种方法来过滤匹配特定类型的子项?

4

1 回答 1

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

应该管用

于 2012-10-31T16:10:09.273 回答