C# Linq到Mongodb动态更新函数

C# Linq到Mongodb动态更新函数,c#,linq,mongodb,C#,Linq,Mongodb,我正在尝试使用泛型动态更新集合。我有一个可行的解决方案: MongoCollection symbolcollection= database.GetCollection<Symbol>("Symbols") var query3 = Query<Symbol>.EQ(e => e.Id, ("0000000000021325640.0"); var update = Update<Symbol>.Set(e => e.Name, "ab

我正在尝试使用泛型动态更新集合。我有一个可行的解决方案:

 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); 
MongoCollection symbolcollection=database.GetCollection(“符号”)
var query3=Query.EQ(e=>e.Id,(“0000000000021325640.0”);
var update=update.Set(e=>e.Name,“abc”);//更新修饰符
symbolcollection.Update(查询3,更新);
但我的问题是,如何在不显式声明集合类型的情况下动态更新集合中的项

我试过这样的方法:

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);
var query=query.EQ(“_id”,新的BsonObjectId(ObjectId.Parse(id));
var update=update.Set(e=>e,entity);
var collection=GetCollection();
收集、更新(查询、更新);
但它抛出了一个例外:

MongoDB.Driver.dll中发生了类型为“System.ArgumentNullException”的异常,但未在用户代码中处理异常消息:值不能为null。 参数名称:name


是否有解决方案,或者工作解决方案是实现这一点的唯一方法?

您可以将操作传递给方法

public void Update(ObjectId id, Expression<Func<Entity , object>> updateExpr , object value)
{
    var query = Query.EQ("_id", new BsonObjectId(id));
    var update = Update<TEntity>.Set(updateExpr, value);
    var collection = GetCollection();
    collection.Update(query, update);
}

我最终通过在将查询传递到执行更新的最终方法之前构建查询来实现它:

 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);
            }
var symbolToUpdate=Update.Set(e=>e.Name,symbol.Name);
更新项(symbolToUpdate,id);
public void UpdateItem(UpdateBuilder symbolToUpdate,字符串id)
{
var query=query.EQ(“_id”,新的BsonObjectId(ObjectId.Parse(id));
var collection=GetCollection();
收款.更新(查询,symbolToUpdate);
}

您不能这样更新,如果您想创建全局方法来处理所有更新,那么您应该将表达式列表传递给update MethodThank man。我刚刚想到了这一点。
 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);
            }