我在 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”属性,或者是否有另一种方法来过滤匹配特定类型的子项?