Linq到Mongodb的动态更新功能

时间:2015-03-27 06:06:33

标签: 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, "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);

但它引发了一个例外:

  

MongoDB.Driver.dll中出现“System.ArgumentNullException”类型的异常但未在用户代码中处理

异常消息:值不能为空。   参数名称:名称

是否有解决方案或工作解决方案是实现这一目标的唯一途径?

2 个答案:

答案 0 :(得分:1)

您可以将Action传递给方法

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);
}

并致电:

Update(ObjectId.GenerateNewId(), x => x.Name, "NAME_VALUE");

答案 1 :(得分:1)

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

 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);
            }