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

このインデックスは、一方のタイプに一致し、もう一方のタイプには一致しない子を除外できないように見えることを除いて、機能します。シリアル化された子の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 に答える