すべて共通のクラス D から継承する 3 つの異なるクラス (A、B、C) のドキュメントを保持する単一の MongoDB コレクションがあります。
公式の C# ドライバーを使用して、3 つのタイプ (A、B、C) のすべてのドキュメントを挿入しました。それらはすべて _t 識別子で正しく表示され、私のコードではそれらのクラス マップが登録されています。
次のような LINQ クエリを発行した場合 (VB を使用):
dim Result = database.GetCollection("mycol").AsQueryable(Of C).Where(some where clause)
この結果をカウントすると、「要素 'クラス A の要素名' は、クラス C のどのフィールドまたはプロパティとも一致しません。」というエラーが表示されます。
AsQueryable(Of C)
弁別器は、コードのここで作動することを意図したものではありませんか? .Count
クラス C の要素に固有の Where 句を発行すると、A、B、および C のドキュメントに適用されているようです。
効果なしで追加しよ.OfType(Of C)
うとしましたが、最初に でリストに変換しようとしました.ToList
が、引き続き同じエラーが発生します。何か案は?
背景として、私のクライアント コードは通常、タイプ D のオブジェクトを処理します。A、B、C は、インデックスを配置したい D から継承された多くの共通プロパティを共有するため、それらを 1 つのコレクションに配置します。ただし、場合によっては、特殊な状況で型 A、B、または C のオブジェクトを直接参照する必要があります。