我正在尝试使用泛型动态更新集合。我有一个可行的解决方案:
MongoCollection symbolcollection= database.GetCollection<Symbol>("Symbols")
var query3 = Query<Symbol>.EQ(e => e.Id, ("0000000000021325640.0");
var update = Update<Symbol>.Set(e => e.Name, "abc"); // update modifiers
symbolcollection.Update(query3, update);
但我的问题是如何在不显式声明集合类型的情况下动态更新集合中的项目?
我尝试过这样的事情:
var query = Query.EQ("_id", new BsonObjectId(ObjectId.Parse(id)));
var update = Update<TEntity>.Set(e => e, entity);
var collection = GetCollection();
collection.Update(query, update);
但它抛出异常:
An exception of type 'System.ArgumentNullException' occurred in MongoDB.Driver.dll but was not handled in user code
Exception Message: Value cannot be null. Parameter name: name
是否有解决方案,或者工作解决方案是实现此目标的唯一方法?
最佳答案
我最终通过构建查询,然后将其传递到 final方法进行更新来使其工作:
var symbolToUpdate = Update<Symbol>.Set(e => e.Name, symbol.Name);
UpdateItem(symbolToUpdate, id);
public void UpdateItem(UpdateBuilder<TEntity> symbolToUpdate, string id)
{
var query = Query.EQ("_id", new BsonObjectId(ObjectId.Parse(id)));
var collection = GetCollection();
collection.Update(query, symbolToUpdate);
}
关于c# - Linq to Mongodb动态更新功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29294320/