2012-10-09 7 views
6

Con la actualización reciente a 10gen c# driver for mongodb Quiero actualizar mi código para que use la versión fuertemente tipada.cómo actualizar elementos en una matriz/lista con el controlador mongo C#?

Mi llamada anterior era:

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 

La nueva llamada sería:

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

pero me da esta excepción:

No se puede determinar la información de serialización para la expresión : (Album x) => x.Ratings.get_Item (WebApp.Areas.API.Controll ers.RatingController + <> c__DisplayClass5.index) .Number.

¿Hay alguna manera de que pueda actualizar un elemento dentro de una lista?

Respuesta

8

Problema interesante. Esto funciona cuando se utiliza una constante, como a continuación:

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

Sin embargo, esto al parecer se rompe cuando se utiliza una variable, al igual que ha hecho con el índice. Esto es definitivamente un error. He creado un problema Jira aquí: https://jira.mongodb.org/browse/CSHARP-598.

Esto probablemente se debe a que no evaluamos parcialmente la expresión antes de procesarla.

+0

Gracias Craig, algo que también sería realmente agradable es cuando al llamar _session.Db(). GetCollection ("Anunciante") si no tenemos que escribir "Publicidad" y que toma por defecto el nombre de la clase, ¡así que no tendremos una cadena mágica en la aplicación! ¡Es un trabajo muy bueno que se ha hecho en mongo-LINQ! – VinnyG

+1

Eso es un debate en curso. https://jira.mongodb.org/browse/CSHARP-126. Por ahora, la mayoría de las personas escribe un método de extensión que usa typeof (T) .Name para el nombre de la colección. –

+0

Reparado desde 1.6.1 – VinnyG

Cuestiones relacionadas