2

コレクションで CRUD 操作を実行するためにインスタンス化して使用する C# クラスがあります。

public class Property
{
   [BsonId]
   public long id { get; set; }

   [BsonElement("address_line")]
   public string address_line { get; set; }
   [BsonElement("city")]
   public string city { get; set; }
   [BsonElement("zip")]
   public string zip { get; set; }
}

foreach ループを使用して、次のように、各要素を指定せずに $set を使用して更新コマンドを作成できるようにしたいと考えています。

var updateValues = new List<UpdateBuilder>();

foreach (var element in property.Elements)
    updateValues.Add(Update.Set(element.Name, element.Value));

collection.Update(Query.EQ("_id", property.id), Update.Combine(updateValues));

私はこれが可能ですか?

4

1 に答える 1

2

これはうまくいくようです:

var updateValues = new List<UpdateBuilder>();

foreach (var element in property.ToBsonDocument().Elements)
{
   if (element.Name != "_id") 
   { 
       updateValues.Add(Update.Set(element.Name, element.Value));
   }
}

collection.Update(Query.EQ("_id", property.id), Update.Combine(updateValues));

より良い解決策があるかどうかはわかりませんが、要素が _id のように読み取り専用でないかどうかを確認する必要がありますが、これにより .Set() コマンドの連鎖が回避されます

于 2013-09-05T16:42:18.130 に答える