6

mongodb 用の 10gen 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

しかし、私はこの例外を受け取ります:

式のシリアル化情報を特定できません: (Album x) => x.Ratings.get_Item(WebApp.Areas.API.Controllers.RatingController+<>c__DisplayClass5.index).Number.

リスト内の項目を更新する方法はありますか?

4

1 に答える 1

8

興味深い問題。これは、次のような定数を使用する場合に機能します。

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

ただし、インデックスで行ったように、変数を使用すると、これは明らかに壊れます。これは間違いなくバグです。ここでJiraの問題を作成しました:https ://jira.mongodb.org/browse/CSHARP-598 。

これは、式を処理する前に部分的に評価していないことが原因である可能性があります。

于 2012-10-10T18:03:30.587 に答える