2012-10-09 10 views
6

10gen c# driver for mongodbへの最新のアップデートでは、強く型付けされたバージョンを使用するようにコードを更新したいと思います。mongo C#ドライバを使用してアレイ/リスト内のアイテムを更新するには?

var update2 = new UpdateBuilder(); 
var index = album.Ratings.IndexOf(rating); 
update2.Set("Ratings." + index + ".Number", number); 
update2.Set("Rating", album.Rating); 
_session.Db().GetCollection<Album>("Album") 
    .Update(Query<Album>.Where(x => x.Id == objId), update2); //this line is working 

新しいコールは次のようになります:

私の以前の呼び出しだった

update.Set(x => x.Ratings[index].Number, number); 
//update2.Set("Ratings." + index + ".Number", number); previous call 

しかし、私はこの例外を取得:

発現用のシリアル化情報を決定することができません。 : (アルバムx)=> x.Ratings.get_Item(WebApp.Areas.API.Controll ers.RatingController + <> c__DisplayClass5.index).Number。

リスト内のアイテムを更新する方法はありますか?

答えて

8

興味深い問題です。これは、以下のような定数を使用すると機能します。

var update = Update<Album>.Set(x => x.Ratings[0].Number, 10); 

しかし、変数を使用すると、これは索引で行ったように、明らかに壊れます。これは間違いなくバグです。私はここにそれについてのJira問題を作成しました:https://jira.mongodb.org/browse/CSHARP-598

これは、処理する前に表現を部分的に評価していない可能性が高いためです。

+0

ありがとうCraig、本当にうれしいのは、_session.Db()を呼び出すときです。GetCollection ( "Advertisement") "広告"を書く必要がなく、デフォルトで名前私たちはアプリで魔法の文字列を持っていないだろう! mongo-LINQで行われてきたとても素晴らしい仕事です! – VinnyG

+1

それは進行中の議論です。 https://jira.mongodb.org/browse/CSHARP-126。今のところ、ほとんどの人はコレクション名にtypeof(T).Nameを使う拡張メソッドを書いています。 –

+0

1.6.1以降に修正されました – VinnyG

関連する問題