是否可以进行查询Expression<Func<T, bool>>
并删除找到的所有文件?我正在使用mongoDB c#驱动程序,我从mongo存储库中获取了这个想法,但我没有在我的实体上继承任何基类,所以我没有类和访问泛型属性“id”
以下代码不起作用:
foreach (T entity in this.collection.AsQueryable<T>().Where(criteria))
{
this.Delete(entity.Id);
}
任何建议?
答案 0 :(得分:2)
您应该可以将查询传递给Remove
。例如,删除所有name
属性值为"test123"
的文档:
collection.Remove(Query.EQ("name", "test123"));
这样,只需一次调用即可删除所有匹配的文档,而不是首先获取匹配项,然后单独删除它们(甚至可以使用$in
运算符删除它们。)
答案 1 :(得分:0)
您可以创建以下通用扩展方法,以删除符合条件的所有文档。但是collection的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);
答案 2 :(得分:0)
您可以使用:
collection.Remove(Query<T>.Where(criteria));