2

クエリ Expression<Func<T, bool>>を実行して、見つかったすべてのドキュメントを削除することはできますか? 私はmongoDB c#ドライバーを使用しています.mongoリポジトリからアイデアを取り入れましたが、エンティティの基本クラスを継承していないため、クラスとジェネリックプロパティ「id」へのアクセスがありません

次のコードは機能しません。

foreach (T entity in this.collection.AsQueryable<T>().Where(criteria))
{
    this.Delete(entity.Id);
}

何かアドバイス?

4

3 に答える 3

0

次の一般的な拡張メソッドを作成して、基準に一致するすべてのドキュメントを削除できます。ただし、コレクションの Remove メソッドでは、削除する必要があるドキュメントを見つけるために MongoQuery が必要です。ID セレクターを渡す場合、ID でドキュメントを選択するクエリを作成できます。

public static void RemoveAll<T>(this MongoCollection<T> collection,
    Expression<Func<T, bool>> criteria, Func<T, BsonValue> idSelector)
{
    foreach (T entity in collection.AsQueryable<T>().Where(criteria))
        collection.Remove(Query.EQ("_id", idSelector(entity)));
}

使用法:

people.RemoveAll(p => p.Age > 50, p => p.Id);
于 2013-10-02T21:58:32.333 に答える
0

これを使用できます:

collection.Remove(Query<T>.Where(criteria));
于 2014-11-16T13:17:04.643 に答える