MongoDBデータベースには、それぞれが特定のタイプのオブジェクトを格納する少数のコレクションがあります。私は、次の定義のように、種類に応じて、特定のコレクションを操作するために、一般的な選択機能を実装しようとしています:MongoDB with C#:カスタム述語を持つ要素を見つける
object[] Select<T>(Func<T, bool> condition)
例えば、オブジェクトの種類の一つはPerson
クラスであるならば、私が実装します次
object[] Select<T>(Func<T, bool> condition)
{
if (typeof(T) == typeof(Person))
{
Func<Person, bool> f = (Person p) =>
{
return true;
};
return this.collectionPersons.AsQueryable().Where(p=>f(p)).ToArray();
}
else // ...
}
このコードはコンパイルが、私はそれを実行しようとすると、私は熟読した後
Additional information: Unsupported filter:
Invoke(value(System.Func`2[Person,System.Boolean]), {document}).
でSystem.ArgumentException
を取得しますAPIドキュメント私は抽象的な種類のラムダ式を使用することはできませんが(上記の例のように)、 FilterDefinitionBuilder
、Gt()
、Eq()
など のようにサポートされているものだけがわかりますこれは、抽象的述語を持つコレクションを照会する可能性があります(MongoDB C#ドライバーが新しくなりました)。
ありがとうございましたMaksim、私は式の代わりに式を実装しようとしました。次のエラーが表示されます。 MongoDB.Driver.Linq.IMongoQueryable 'には' Where 'の定義が含まれていません。また、最適な拡張メソッドオーバーロード' System.Linq.Queryable.Where (System.Linq.IQueryable 、System.Linq.Expressions.Expression >) 'に無効な引数がいくつかあります。 私は自然にこのようにすべての項目を照会するつもりはない、 'return true;'とにかくうまくいかなかったもっとも単純なケースでした。 –
私はこれを試してみましたが、この方法で私は答えました(私はそれを少し更新しました)私は自分のコレクションに問い合わせることができました。 –
@AlexKonnenおそらく、いくつかのusingステートメントがありませんか? –