我在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'属性,还是有另一种方法可以过滤匹配特定类型的子项?
答案 0 :(得分:1)
Map = @"from doc in docs.Parent select new { A = doc.Dynamic.A, B = doc.Dynamic.B, Type = doc.Dynamic[""$type""] }"
应该工作